我正在尝试实现一个基本的光线跟踪器,它涉及到将每条光线变换到每个对象空间,并通过将仿射变换矩阵的逆矩阵与光线相乘来测试与仿射变形对象的交集。当对象旋转、缩放但不平移时,相交测试是正确的。当对象被平移(并且该对象应该仍然可见)时,交集测试失败,并且不显示任何对象。
发布于 2011-11-20 18:31:16
在应用转换时,操作的顺序很重要。以不同的顺序应用它们会得到不同的结果。
例如,假设您有一个中心位于(0,0,0)的长方体。现在旋转,然后平移长方体。旋转将相对于坐标系的原点发生。
如果你从平移长方体开始,假设是(1,0,0),然后进行旋转。长方体仍将相对于坐标系的中心旋转。但是,长方体现在在坐标系的中心位置变长了,因此它以弧形摆动。
This is a useful write-up about order of transformations
如果你已经知道了这一切,那么很抱歉。
我能做的另外一件事就是指引你到我的ray tracing project on github pvtrace的方向。它都是用Python编写的,您应该能够使用它来调试您的交叉点代码。If具有不同的基元形状,您也可以使用它们来应用变换。所有转换都是通过使用原语的append_transformation()方法来应用的。所有变换都是传递给此方法的4x4齐次矩阵。齐次矩阵本身是使用与源代码捆绑在一起的transformations.py构建的。
我希望这能有所帮助。
https://stackoverflow.com/questions/8198998
复制相似问题