我刚刚在3D项目中遇到了奇怪的问题.每个人都知道计算LookAt向量的算法,但是从变换矩阵计算"向上"向量并不是那么容易(或者至少可能是我简单错过了一些东西).
问题如下:
"向上"向量是(0,1,0)用于同一性旋转矩阵并用矩阵旋转,但不进行缩放或平移.如果你有简单的旋转矩阵程序很容易(乘法矢量和矩阵).但是,如果矩阵也包含平移和旋转(例如,它是通过乘以其他几个矩阵产生的),这将不起作用,因为矢量将被平移和缩放.
我的问题是如何从单个变换矩阵获得这个"向上"向量,假设向量(0,1,0)对应于单位旋转矩阵.
翻译实际上确实会影响它.假设在该示例中,变换矩阵没有进行任何缩放或旋转,但确实在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)所需的.