从3D中的变换矩阵计算"向上矢量"

3 math 3d vector matrix

我刚刚在3D项目中遇到了奇怪的问题.每个人都知道计算LookAt向量的算法,但是从变换矩阵计算"向上"向量并不是那么容易(或者至少可能是我简单错过了一些东西).

问题如下:

"向上"向量是(0,1,0)用于同一性旋转矩阵并用矩阵旋转,但不进行缩放或平移.如果你有简单的旋转矩阵程序很容易(乘法矢量和矩阵).但是,如果矩阵也包含平移和旋转(例如,它是通过乘以其他几个矩阵产生的),这将不起作用,因为矢量将被平移和缩放.

我的问题是如何从单个变换矩阵获得这个"向上"向量,假设向量(0,1,0)对应于单位旋转矩阵.

Ale*_*319 7

翻译实际上确实会影响它.假设在该示例中,变换矩阵没有进行任何缩放或旋转,但确实在Z方向上将其转换为2个单位.然后当你转换(0,1,0)时得到(0,1,2),然后归一化它给出(0,1/sqrt(5),2/sqrt(5)).

你想要做的是取(0,1,0)的变换和(0,0,0)的变换之间的差异,然后归一化得到的矢量.在上面的例子中,你将(0,1,2)减去(0,0,2)(0,0,2是零向量的变换)得到(0,1,0)所需的.


Ric*_*lap 5

将矩阵应用于向上向量的两个端点-(0,0,0)和(0,1,0)。计算这两点之间的向量,然后对其进行缩放以获得一个单位向量。那应该解决翻译问题。


Wil*_*and 0

我不是矩阵计算方面的专家,但在我看来,计算相乘矩阵的向上向量并将结果向量归一化为单位向量是一个简单的问题。平移根本不应该影响它,并且缩放很容易被标准化所击败。