Graphics 球面光线跟踪
我正在用球体进行光线跟踪。当我们解二次方程得到两个根时,我们需要取哪个值?我的理解是,我们需要取最小的值。但是,当我在计算交点和进一步的照明计算时,我得到了错误的结果。当我拿大一点的时候,它会给出正确的结果。我在网上看到了一些例子,其中一些拿的是较小的,另一些拿的是较大的。我真的很困惑哪一个是正确的,为什么是正确的。假设光线的原点是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,取最小非负根Graphics 球面光线跟踪,graphics,raytracing,Graphics,Raytracing,我正在用球体进行光线跟踪。当我们解二次方程得到两个根时,我们需要取哪个值?我的理解是,我们需要取最小的值。但是,当我在计算交点和进一步的照明计算时,我得到了错误的结果。当我拿大一点的时候,它会给出正确的结果。我在网上看到了一些例子,其中一些拿的是较小的,另一些拿的是较大的。我真的很困惑哪一个是正确的,为什么是正确的。假设光线的原点是O,方向是R(理想情况下是单位向量)。然后光线由参数方程O+tR定义。将其分解为Ox+tRx、Oy+tRy和Oz+tRz。将这些替换为圆x^2+y^2+z^2=0的方
交点是O+tR,其中t是最小的非负根。从那以后,我不知道为什么你的照明计算会被关闭。据我所知,这篇文章是不正确的。取较大的根会使您跟踪球体的另一侧。我没有时间去真正调查,但我觉得这是不对的。像这样的例子有时看起来似乎是正确的,但事实并非如此。在POVRay中渲染相同的场景并查看它的外观将非常有趣。