我正在研究我的第一个光线跟踪器,我决定将模型用于世界矩阵,将我的相机/主光线转换为模型空间,简单地将原始形状的交叉算法(包括球体,平面,圆筒和圆锥体。
例如,在圆柱体的情况下,我想变换射线原点和方向以测试与高度为1,半径为1,位置(0,0,0)和方向/方向/旋转的圆柱体的交点( 0,1,0)。 (xyz格式,x向右,y向上,z向远)。
我也知道世界空间中的射线起源和方向。
如何确定任何类型圆柱体的模型转换矩阵的世界? (例如:高度2,半径3,位置(4,5,6)和方向(1,2,0))
我特别难以正确解释圆柱体的方向和光线圆柱交叉算法。
会喜欢一些帮助!
请注意,我已经在网上做了大量关于此的研究,这些矩阵不是我的强项,但我期待着阅读你的建议/答案。
最后,我在C中做这个,用SDL,math.h和我自己的矩阵函数等...
爱! < 3
答案 0 :(得分:0)
在太空中定位和定位对象的最佳方法是为其设置四元数。它基本上包含给定空间(例如世界)中位置和旋转的信息。可以从一对简单的向量 - 位置和方向创建四元数。要应用存储在这种四元数中的变换,必须从中创建矩阵。在光线跟踪的情况下,需要使用逆矩阵将光线转换为模型空间,用于对象的四元数(从世界到模型空间的转换,假设光线在世界空间中),在模型空间中进行交集,最后转换回到世界空间的交点(用已经提到的非逆矩阵从四元数开始)。
这是理论。自己实现四元数是件苦差事。最好使用一些现有的库,例如GLM。确保它具有所需的功能 - 从一对向量创建四元数,将其转换为矩阵并反转矩阵/四元数。