了解 OpenGL glPushMatrix 和 glPopMatrix
Understanding OpenGL glPushMatrix and glPopMatrix
我是 OpenGL 的新手,正在尝试渲染两个对象,但只有其中一个应该旋转。我从 here 那里了解到,我可以使用 glPushMatrix
和 glPopMatrix
只对一个对象应用旋转,但我的不起作用。
这是我的代码:
void renderObjs() {
//glPushMatrix();
drawPyramid(0, 0.7, 0, 0.289, 0, 0.167, -0.289, 0, 0.167, 0, 0, -0.33); // a function to draw triangles
//glPopMatrix();
glPushMatrix();
glRotatef(0.3f, 1.f, 1.f, 1.f);
drawPyramid(0 - 0.5, 0.7 - 0.5, 0 - 0.5, 0.289 - 0.5, 0 - 0.5, 0.167 - 0.5, -0.289 - 0.5, 0 - 0.5, 0.167 - 0.5, 0 - 0.5, 0 - 0.5, -0.33 - 0.5);
glPopMatrix();
}
int main() {
// some initialization
...codes here...
while (!glfwWindowShouldClose(window))
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
renderObjs();
glfwSwapBuffers(window);
glfwPollEvents();
}
// other useful functions
...codes here...
}
但是我的金字塔都不旋转。为什么会这样?我是否以错误的方式使用了 glPushMatrix
和 glPopMatrix
?
类似glRotatef
的矩阵变换操作,指定一个矩阵,将当前矩阵乘以新矩阵。 glPushMatrix
将当前矩阵压入矩阵栈。 glPopMatrix
从矩阵栈中弹出一个矩阵,通过弹出的矩阵设置当前矩阵。 glRotate
的角度单位是度:
glPushMatrix();
glRotatef(30.0f, 1.f, 1.f, 1.f);
drawPyramid(0 - 0.5, 0.7 - 0.5, 0 - 0.5, 0.289 - 0.5, 0 - 0.5, 0.167 - 0.5, -0.289 - 0.5, 0 - 0.5, 0.167 - 0.5, 0 - 0.5, 0 - 0.5, -0.33 - 0.5);
glPopMatrix();
如果要连续旋转物体,需要在每张图片中增加旋转角度:
float angle = 0.0f;
void renderObjs() {
//glPushMatrix();
drawPyramid(0, 0.7, 0, 0.289, 0, 0.167, -0.289, 0, 0.167, 0, 0, -0.33); // a function to draw triangles
//glPopMatrix();
glPushMatrix();
glRotatef(angle, 1.f, 1.f, 1.f);
angle += 0.1f
drawPyramid(0 - 0.5, 0.7 - 0.5, 0 - 0.5, 0.289 - 0.5, 0 - 0.5, 0.167 - 0.5, -0.289 - 0.5, 0 - 0.5, 0.167 - 0.5, 0 - 0.5, 0 - 0.5, -0.33 - 0.5);
glPopMatrix();
}
我是 OpenGL 的新手,正在尝试渲染两个对象,但只有其中一个应该旋转。我从 here 那里了解到,我可以使用 glPushMatrix
和 glPopMatrix
只对一个对象应用旋转,但我的不起作用。
这是我的代码:
void renderObjs() {
//glPushMatrix();
drawPyramid(0, 0.7, 0, 0.289, 0, 0.167, -0.289, 0, 0.167, 0, 0, -0.33); // a function to draw triangles
//glPopMatrix();
glPushMatrix();
glRotatef(0.3f, 1.f, 1.f, 1.f);
drawPyramid(0 - 0.5, 0.7 - 0.5, 0 - 0.5, 0.289 - 0.5, 0 - 0.5, 0.167 - 0.5, -0.289 - 0.5, 0 - 0.5, 0.167 - 0.5, 0 - 0.5, 0 - 0.5, -0.33 - 0.5);
glPopMatrix();
}
int main() {
// some initialization
...codes here...
while (!glfwWindowShouldClose(window))
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
renderObjs();
glfwSwapBuffers(window);
glfwPollEvents();
}
// other useful functions
...codes here...
}
但是我的金字塔都不旋转。为什么会这样?我是否以错误的方式使用了 glPushMatrix
和 glPopMatrix
?
类似glRotatef
的矩阵变换操作,指定一个矩阵,将当前矩阵乘以新矩阵。 glPushMatrix
将当前矩阵压入矩阵栈。 glPopMatrix
从矩阵栈中弹出一个矩阵,通过弹出的矩阵设置当前矩阵。 glRotate
的角度单位是度:
glPushMatrix();
glRotatef(30.0f, 1.f, 1.f, 1.f);
drawPyramid(0 - 0.5, 0.7 - 0.5, 0 - 0.5, 0.289 - 0.5, 0 - 0.5, 0.167 - 0.5, -0.289 - 0.5, 0 - 0.5, 0.167 - 0.5, 0 - 0.5, 0 - 0.5, -0.33 - 0.5);
glPopMatrix();
如果要连续旋转物体,需要在每张图片中增加旋转角度:
float angle = 0.0f;
void renderObjs() {
//glPushMatrix();
drawPyramid(0, 0.7, 0, 0.289, 0, 0.167, -0.289, 0, 0.167, 0, 0, -0.33); // a function to draw triangles
//glPopMatrix();
glPushMatrix();
glRotatef(angle, 1.f, 1.f, 1.f);
angle += 0.1f
drawPyramid(0 - 0.5, 0.7 - 0.5, 0 - 0.5, 0.289 - 0.5, 0 - 0.5, 0.167 - 0.5, -0.289 - 0.5, 0 - 0.5, 0.167 - 0.5, 0 - 0.5, 0 - 0.5, -0.33 - 0.5);
glPopMatrix();
}