我只是在我的3D项目中遇到了奇怪的问题。每个人都知道计算LookAt向量的算法,但是从变换矩阵计算“向上”向量就不那么容易了(或者至少我可能漏掉了什么)。
问题如下:
对于单位旋转矩阵,向上向量为(0,1,0),并随矩阵旋转,但不缩放或平移。如果你有简单的旋转矩阵,程序就很容易(将向量和矩阵相乘)。但是如果矩阵还包含平移和旋转(例如,它是通过将其他几个矩阵相乘而产生的),这将不起作用,因为向量将被平移和缩放。
我的问题是如何从单个变换矩阵中获得这个“上”向量,假设向量(0,1,0)对应于单位旋转矩阵。
发布于 2009-07-13 12:06:28
翻译确实会影响它。让我们假设在这个例子中,变换矩阵没有做任何缩放或旋转,但在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)。
发布于 2009-07-13 12:04:01
将矩阵应用于上方向向量的两个端点-- (0,0,0)和(0,1,0)。计算这两个点之间的向量,然后对其进行缩放以获得单位向量。这应该会解决翻译方面的问题。
发布于 2009-07-13 12:02:41
简单地将向上向量(0,1,0)与变换相乘,然后规格化。这样你就可以得到新的向上向量了。
https://stackoverflow.com/questions/1121675
复制