我正在用球体进行光线追踪。当我们求解二次方程并获得两个根时,我们需要采用哪个值?我的理解是我们需要取最小的价值。但是当我把这个值放在计算交叉点和进一步的照明计算时,我得到了错误的结果。当我拿大一个时,它给出了正确的结果。我在网上看到了一些例子,其中一些正在采用较小的一个,而另一些正在变大。我真的很困惑哪一个是正确的,为什么。
答案 0 :(得分:0)
假设光线的原点是O而方向是R(理想情况下是单位矢量)。然后,光线由参数方程O + tR定义。将其分解为组分Ox + tRx,Oy + tRy和Oz + tRz。将这些替换为圆的等式x ^ 2 + y ^ 2 + z ^ 2 = 0.这产生具有变量t的二次方程。找出等式的根源。
现在,如果你没有真正的根,光线就不会击中球体。如果你有一个真正的根,那么你就到了球体的一侧。如果你有两个真正的根,那么你击中球体两次。你想要更近的根(较小的t),除非t是负的,在这种情况下,交叉点在你后面并且你不在乎。如果两个根都是负数,那么两个交点都在光线的原点后面,你可以忽略它们。
如果球体远离原点转换并且您关心球体的旋转和缩放,那么球体的方程式随着xy,yz,xz,x,y和z项变得更加复杂。一般二次曲线形状定义为Ax ^ 2 + By ^ 2 + Cy ^ 2 + Dxy + Eyz + Fxz + Gx + Hy + Jz + K = 0.上述原理仍然适用。替换参数线方程,求解t,取最小的非负根。
您的交点是O + tR,其中t是最小的非负根。从那里,我不知道为什么你的照明计算会被关闭。