使用C ++在OpenGL中移动自动旋转的3d多边形

时间:2020-06-12 14:43:13

标签: c++ opengl 3d glut opengl-compat

我正在尝试使用以下键将这些两个自动旋转的多边形移动到Right-Left,Up-Down和Front-Back: 对于金字塔,其键(“ a”,“ w”,“ s”,“ d”,“ +”,“-”) 对于多维数据集,其键(“←”,“↑”,“→”,“↓”,“ PAGE UP”,“ PAGE DOWN”) 多边形实际上确实在移动,但是它们以一种奇怪的方式移动,而不是我希望它们移动的时候,特别是当我尝试上下移动它们时 我想知道为什么它们会运动,以及我应该如何改变才能使其正常运动。

这是代码:

ErrorListener

1 个答案:

答案 0 :(得分:2)

更改转换顺序。进行旋转然后进行平移:

glTranslatef(2.0f, 0.0f, -7.0f);
glTranslatef(pyramid_x, pyramid_y, pyramid_z);
glRotatef(pyramid_angle, 1.0f, 0.0f, 0.0f);
glTranslatef(-2.0f, 0.0f, -7.0f);
glTranslatef(cube_x, cube_y, cube_z);
glRotatef(cube_angle, 1.0f, 0.0f, 0.0f);

矩阵乘法不是CommutativeglRotateglTranslate之类的操作会设置一个新矩阵,并将当前矩阵乘以新矩阵。因此,首先需要完成的转换必须是代码中的最后一个。


此外,keyboard中存在错误。按下 w 时,金字塔必须向上移动而不是向前移动:

case 'w':pyramid_front(); break;

case 'w':pyramid_up(); break;
相关问题