4

我在合并转换时遇到了麻烦。不管出于什么原因,一切都不像我想的那样发展,但说实话——所有来回的转变让我很头晕。

正如我到处阅读的那样(尽管很少有明确的解释,恕我直言),转换的原理算法如下:

  • 用变换矩阵的逆变换射线(原点和方向)
  • 用变换矩阵变换得到的交点
  • 在交点处变换对象的法线,并用逆的转置

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

你可以在这里阅读我的部分代码:

main.cpp , scene.cpp , sphere.cpp , sdf-loader.cpp

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

编辑:

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

未转换的场景:

未转换的场景

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

球体缩放 (2,4,2)

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

翻译框 (0,-200,0)

球体平移(-300,0,0):

球体平移 (-300,0,0)

球体 x 旋转 (45°):

球体 x 旋转 (45°)

4

1 回答 1

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/

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

于 2013-09-04T15:08:26.910 回答