我在合并转换时遇到问题。不管出于什么原因,一切都没有像我想的那样进行,但老实说——所有的来回变换让我很头晕。
正如我到处阅读的那样(虽然明确的解释很少见,恕我直言),转换的主要算法如下:
- 用变换矩阵的逆变换射线(原点和方向)
- 用变换矩阵变换得到的交点
- 将物体在交点处的法线转换为逆的转置
据我了解,这应该可以解决问题。我很确定我的问题出在我尝试计算光照时,因为初始交叉点和光照算法都使用相同的函数 (obj.getIntersection()
)。但话又说回来,我不知道。 :(
您可以在这里阅读我的部分代码:
main.cpp , scene.cpp , sphere.cpp , sdf-loader.cpp
如果您需要更多信息来帮助我,请告诉我 - 请帮助我! ;)
编辑:
我做了一些结果,也许有人“看到”(通过结果)我可能错了的地方:
未转换的场景:
球体缩放 (2,4,2):
翻译框 (0,-200,0):
转换后的球体 (-300,0,0):
球体 x 轴旋转(45°):
最佳答案
一般来说,对于计算机图形学中的转换,我建议您看看 scratchapixel.com,尤其是本课:
http://scratchapixel.com/lessons/3d-basic-lessons/lesson-4-geometry/
还有这一个,您可以在其中看到如何使用变换(矩阵)来变换光线和物体:
如果您还不知道这个令人惊叹的资源,我建议您使用它,也许可以在您的大学里宣传一下。你的老师应该已经向你指出了。
关于c++ - 光线追踪:转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18418855/