从模型矩阵或四元数中找到最终的世界坐标
Find final world coordinates from model matrix or quaternion
我使用对象的模型矩阵在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()
并应用除视口变换之外的所有内容。
相关文章:
- 在 OpenGL 中将笛卡尔世界坐标转换为球面局部坐标
- 如何在Openscenegraph中从二维鼠标点击的屏幕坐标点计算三维点(世界坐标)
- OpenGL屏幕坐标到世界坐标
- 将 2D 图像坐标转换为 z = 0 的 3D 世界坐标
- 计算世界坐标中z_far平面的顶点
- 如何将世界坐标转换为相机图像坐标
- 将 2D 屏幕坐标转换为 3D 世界坐标
- 如何获得世界坐标屏幕(DX11,C )的射线方向
- 在给定的世界坐标下修改网格上的纹理
- 相机外在矩阵到世界坐标
- 如何将像素坐标转换为世界坐标
- 图像点(像素)到真实世界坐标(米)
- 使用点云库将点云转换为世界坐标
- 鼠标世界坐标框2D
- 将 GL 模型视图矩阵转换为世界坐标
- 相机在世界坐标中的位置来自 cv::solvePnP
- 从模型矩阵或四元数中找到最终的世界坐标
- Kinect:从颜色空间到世界坐标
- c++ /OpenGL转换世界坐标到屏幕(2D)坐标
- 图形-从世界坐标确定TRIANGLE_FAN圆的半径和局部坐标