【发布时间】:2020-02-01 16:38:11
【问题描述】:
我的光线追踪器有问题。我正在尝试使用内部不同的对象渲染Cornell Box,当我创建带有球体的盒子时,结果很好,但是当我创建带有平面的盒子时,结果太暗,并且似乎有很多噪音。
平面结果:
球体结果:
我的平面射线相交似乎还不错:
virtual bool hits(ray r, vec& h){
double den=dot(normal_,r.direction());
if (abs(den) > 0.0001f) // your favorite epsilon
{
double t=dot((point_-r.origin()),normal_)/den;
if (t >= 0){
h=vec(t,0.0,0.0);
return true; // you might want to allow an epsilon here too
}
}
return false;
}
有人知道会发生什么吗?提前致谢
【问题讨论】:
-
您能详细说明
planes与spheres的区别吗?上图和下图似乎显示了相同的场景。你如何创建一个带有球体的盒子?使用无限半径的球体? -
是的,使用无限半径的球体,但我意识到问题出在哪里。我通过设置一个新条件来改变遮挡,以避免飞机撞到自己。这样,在光线来自它所击中的同一对象的情况下,可以避免遮挡。此外,通过对沿法线的击球点使用一些偏差有助于摆脱这个问题
标签: c++ graphics raytracing