raytracing:转换问题

时间:2013-08-24 12:58:22

标签: c++ transformation raytracing raycasting

我在整合转换方面遇到了麻烦。无论出于何种原因,一切都不会像我认为的那样进行,但说实话 - 来回的所有转变让我感到头晕目眩。

正如我到处读到的那样(尽管明确的解释很少见,imho),转换的主要算法如下:

  • 使用变换矩阵的逆转换Ray(Origin和Direction)
  • 使用变换矩阵
  • 变换生成的交点
  • 使用逆转换
  • 转换交点处的对象法线

根据我的理解,这应该可以解决问题。当我尝试计算光照时,我很确定我的问题在于,因为初始交点和光照算法都使用相同的函数(obj.getIntersection())。但话说回来,我不知道。 :(

您可以在此处阅读部分代码:

main.cppscene.cppsphere.cppsdf-loader.cpp

如果您需要更多信息来帮助我,请告诉我 - 请帮助我! ;)

编辑:

我做了一些结果,也许有人“看到”(通过结果)我可能错了:

未转化的场景:

untransformed scene

球体缩放(2,4,2):

sphere scaled (2,4,2)

框翻译(0,-200,0):

box translated (0,-200,0)

球体翻译(-300,0,0):

sphere translated (-300,0,0)

球体x旋转(45°):

sphere x-rotated (45°)

1 个答案:

答案 0 :(得分:0)

一般来说,对于计算机图形学的转换,我建议你去看看scratchapixel.com,尤其是这一课:

http://scratchapixel.com/lessons/3d-basic-lessons/lesson-4-geometry/

和这一个,你可以看到变换(矩阵)如何用于变换光线和物体:

http://scratchapixel.com/lessons/3d-basic-lessons/lesson-8-putting-it-all-together-our-first-ray-tracer/

如果您还不知道这个惊人的资源,我建议您使用它,也许在您的大学传播这个词。你的老师应该向你指出。