绘制场景之前要确保当前模型视图矩阵是单位矩阵
先旋转后移动 与 先移动后旋转 有不同的结果,矩阵没有交换律
程序运行截图如下:
源码如下(先移动再旋转):
void Draw() {
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glPushMatrix();
glTranslatef(0.0f, 0.0f, -5.0f);
glPushMatrix();
glRotatef(30.0f, 0.0f, 1.0f, 0.0f);
glBegin(GL_TRIANGLES);
glColor4ub(255, 0, 0, 255); glVertex3f(-0.5f, -0.25f, 0.0f);
glColor4ub(0, 0, 255, 255); glVertex3f(0.5f, -0.25f, 0.0f);
glColor4ub(0, 255, 0, 255); glVertex3f(0.0f, 0.5f, 0.0f);
glEnd();
}
程序运行截图如下:
下面是先旋转,后移动:
程序运行截图如下:
代码如下:
void Draw() {
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glPushMatrix();
glRotatef(30.0f, 0.0f, 1.0f, 0.0f);
glPushMatrix();
glTranslatef(0.0f, 0.0f, -5.0f);
glBegin(GL_TRIANGLES);
glColor4ub(255, 0, 0, 255); glVertex3f(-0.5f, -0.25f, 0.0f);
glColor4ub(0, 0, 255, 255); glVertex3f(0.5f, -0.25f, 0.0);
glColor4ub(0, 255, 0, 255); glVertex3f(0.0f, 0.5f, 0.0f);
glEnd();
glPopMatrix();
glPopMatrix();
}