我在合并转换时遇到了麻烦。不管出于什么原因,一切都不像我想的那样发展,但说实话——所有来回的转变让我很头晕。
正如我到处阅读的那样(尽管很少有明确的解释,恕我直言),转换的原理算法如下:
- 用变换矩阵的逆变换射线(原点和方向)
- 用变换矩阵变换得到的交点
- 在交点处变换对象的法线,并用逆的转置
据我了解,这应该可以解决问题。我很确定我的问题出在我尝试计算光照时,因为初始交叉点和光照算法都使用相同的函数 ( obj.getIntersection()
)。但话又说回来,我不知道。:(
你可以在这里阅读我的部分代码:
main.cpp , scene.cpp , sphere.cpp , sdf-loader.cpp
如果您需要更多信息来帮助我,请告诉我 - 请帮助我!;)
编辑:
我做了一些结果,也许有人“看到”(通过结果)我可能错了:
未转换的场景:
球体缩放(2,4,2):
框翻译 (0,-200,0):
球体平移(-300,0,0):
球体 x 旋转 (45°):