【发布时间】:2011-02-25 13:25:49
【问题描述】:
我在 3D 空间中定义了一个具有位置、旋转和缩放值的对象(全部定义为 3D 矢量)。它还具有向上和向前的方向向量。当我旋转对象时,我需要这些方向向量来随之旋转。
假设我的向上向量是 (0, 1, 0) 并且我的前向向量是 (0, 0, 1) 在零旋转时,我该如何实现?
【问题讨论】:
我在 3D 空间中定义了一个具有位置、旋转和缩放值的对象(全部定义为 3D 矢量)。它还具有向上和向前的方向向量。当我旋转对象时,我需要这些方向向量来随之旋转。
假设我的向上向量是 (0, 1, 0) 并且我的前向向量是 (0, 0, 1) 在零旋转时,我该如何实现?
【问题讨论】:
您可以将当前向量与旋转矩阵相乘(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) |
【讨论】:
只需将这些向量中的每一个旋转与对象旋转相同的角度即可。假设您正在绕 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 轴旋转,这与您的前向矢量平行
【讨论】: