从模型矩阵或四元数中找到最终的世界坐标

Find final world coordinates from model matrix or quaternion

本文关键字:世界坐标 模型 四元数      更新时间:2023-10-16

我使用对象的模型矩阵在OpenGL中显示对象,该矩阵是根据我预先存储的对象位置和应用于旋转的四元数构建的。在应用旋转和变换(对象显示在屏幕上的坐标)之后,我需要在对象的3D中找到最终的笛卡尔坐标。如何获取平面坐标?

如果我理解正确,你有一个对象;如果在不应用任何变换的情况下渲染它,它的中心将位于[0,0]

您在三维空间中有一个点[a,b,c]。将转换应用于模型视图矩阵。现在,如果渲染对象,其中心将位于世界空间坐标中的[a,b,c]

您有一个四元数,[qw,qx,qy,qz]。由此创建一个旋转矩阵M,并将其应用于模型视图矩阵。现在您想知道对象在世界空间中的中心的新坐标[a',b',c']

如果这是真的,那么最简单的方法就是自己做矩阵乘法:

a' = m11*a + m12*b + m13*c
b' = m21*a + m22*b + m23*c
c' = m31*a + m32*b + m33*c

其中

    [m11 m12 m13]
M = [m21 m22 m23]
    [m31 m32 m33]

但也许您实际上并没有构建M。另一种方法是直接使用四元数,尽管这主要涉及构建旋转矩阵,然后使用它

应该不需要实际使用gluProject。将旋转应用于模型视图矩阵时,将在那里进行矩阵相乘。所以你可以从矩阵本身得到值:

double mv[16];
glGetDoublev(GL_MODELVIEW_MATRIX,mv);
a' = mv[13];
b' = mv[14];
c' = mv[15];

这将告诉模型视图矩阵移动模型原点的位置。

重新实现gluProject()并应用除视口变换之外的所有内容。