我在3D空间中定义了一个具有位置,旋转和缩放值的对象(全部定义为3D矢量)。它还具有向上和向前的方向向量。当我旋转对象时,我需要这些方向向量随之旋转。
假设我的向上矢量是(0,1,0)并且我的前向矢量在零旋转时是(0,0,1),我怎么能实现这个呢?
答案 0 :(得分:4)
您可以将当前矢量与旋转矩阵(Wikipedia entry,在“基本旋转”下)相乘。如果旋转在2轴或更多轴上,只需乘以适当的矩阵。例如,如果在X轴上旋转30度,在Y轴上旋转60度,则乘以
| 1 0 0 |
| 0 cos(pi/6) -sin(pi/6) |
| 0 sin(pi/6) cos(pi/6) |
然后通过
| cos(pi/3) 0 sin(pi/3) |
| 0 1 0 |
| -sin(pi/3) 0 cos(pi/3) |
答案 1 :(得分:1)
将这些矢量中的每一个旋转的角度与旋转对象的角度相同。假设你绕z轴旋转(即(0,0,1))
方程将是:
x' = x cos(angle) + y sin(angle)
y' = -x sin(angle) + y cos(angle)
z' = z
你的“向上”向量是(0,1,0),因此;
x' = 0 * cos(angle) + 1 * sin(angle) = sin(angle)
y' = -0 * sin(angle) + 1 * cos(angle) = cos(angle)
z' = 0
你“转发”向量是(0,0,1),所以:
x' = 0
y' = 0
z' = 1
它不会旋转,因为我们围绕z轴旋转,这是向前向量的parellel