矩阵乘法 opengl 围绕对象旋转
Matrix Multiplication opengl rotating around an object
>我创建了 2 个圆圈,其中一个围绕另一个旋转,就像月亮围绕太阳旋转一样。
我向下平移了 z 轴,然后围绕 y 轴应用了旋转,使物体进入轨道。我需要计算出矩阵乘法y旋转 * ZTranslation * (0,0,0,1)
即
(cos(angle) 0 sin(angle) 0 ) ( 1 0 0 0 ) ( 0 )
( 0 1 0 0 ) ( 0 1 0 0 ) ( 0 )
(-sin(angle) 0 cos(angle) 0 ) ( 0 0 1 zTran ) ( 0 )
( 0 0 0 1 ) ( 0 0 0 1 ) ( 1 )
我该怎么做?
既然你说的是圆圈,我假设你正在制作一个2D应用程序。
在 OpenGL 中,您有以下坐标:
Y
|
|
|
O---- X
/
/
Z
这意味着您的 2D 应用程序位于 X-Y 空间中,Z 垂直于显示器(朝向外部)。
因此,如果有一个圆绕另一个圆,您可能打算首先在 X-Y 平面上平移圆(例如在 Y 轴上),然后在 Z 轴上应用旋转。
所以你的矩阵乘法应该是:
(cos(angle) sin(angle) 0 0 ) ( 1 0 0 0 ) ( circle_center_x )
(-sin(angle) cos(angle) 0 0 ) ( 0 1 0 yTran ) ( circle_center_y )
( 0 0 1 0 ) ( 0 0 1 0 ) ( 0 )
( 0 0 0 1 ) ( 0 0 0 1 ) ( 1 )
或者只是 2D:
(cos(angle) sin(angle) 0 ) ( 1 0 0 ) ( circle_center_x )
(-sin(angle) cos(angle) 0 ) ( 0 1 yTran ) ( circle_center_y )
( 0 0 1 ) ( 0 0 1 ) ( 1 )
使用 OpenGL 函数:
glRotatef(angle, 0, 0, 1);
glTranslatef(0, yTran, 0);
glBegin(GL_LINE_LOOP);
for (...)
/* points of circle around circle_center_x/y */
glEnd();
请注意,在 OpenGL 中,矩阵在右侧相乘。因此,如果您在glTranslatef
之前编写glRotatef
,则在翻译后将应用旋转。
相关文章:
- 形状对象的旋转和缩放不正确C++
- 如何在OpenGL中正确旋转和缩放对象?
- 当表示为对象的一维向量时,有效地旋转 NxM 矩阵 (C++)
- 如何围绕对象旋转相机?
- 如何在 opengl 中仅旋转特定对象而不影响其他对象?
- 将四元数旋转的游戏对象旋转另一个四元数时出现问题
- 鼠标单击 OpenGL 时无法围绕其自己的中心旋转对象
- 无法在D2D1中旋转对象
- 如何使用OpenCV从图像中检测旋转对象
- OpenCV 检测多个旋转的缩放对象
- OpenGL c++ 中的旋转子对象
- 无法从非原点的其他位置旋转对象
- 在Qt5的OpenGL绘图中通过鼠标移动计算对象旋转角度
- 围绕另一个对象旋转对象
- 矩阵乘法 opengl 围绕对象旋转
- 对象旋转/平移后重新计算AABB正确
- 围绕另一个对象旋转的物体不断加速
- 在 C++/OpenGL 中围绕另一个对象旋转投影一个对象
- 如何在OpenGL中将对象旋转一定程度?有内置的命令吗?或者我必须使用公式吗
- 如何在其他部件旋转时阻止对象旋转