开启深度测试
void RenderScene()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0, 300, 0, 0, 1, 0, 0, 0, -1);
glTranslatef(100, 0, 0.0);
glRotated(Rot, 0, 1.0, 0);
glBegin(GL_QUADS); //以下面都是参考世界坐标
glColor3f(0.0f,1.0f,0.0f); // 顶:绿色
glVertex3f( 40.0f, 40.0f,-40.0f);glVertex3f(-40.0f, 40.0f,-40.0f);glVertex3f(-40.0f, 40.0f, 40.0f);glVertex3f( 40.0f, 40.0f, 40.0f);
glColor3f(1.0f,0.0f,0.0f); //底:红
glVertex3f( 40.0f,-40.0f, 40.0f);glVertex3f(-40.0f,-40.0f, 40.0f);glVertex3f(-40.0f,-40.0f,-40.0f);glVertex3f( 40.0f,-40.0f,-40.0f);
glColor3f(0.0f,0.0f,1.0f); //前:蓝
glVertex3f( 40.0f, 40.0f, 40.0f);glVertex3f(-40.0f, 40.0f, 40.0f);glVertex3f(-40.0f,-40.0f, 40.0f);glVertex3f( 40.0f,-40.0f, 40.0f);
glColor3f(1.0f,1.0f,1.0f); //后:白
glVertex3f( 40.0f,-40.0f,-40.0f);glVertex3f(-40.0f,-40.0f,-40.0f);glVertex3f(-40.0f, 40.0f,-40.0f);glVertex3f( 40.0f, 40.0f,-40.0f);
glColor3f(1.0f,1.0f,0.0f); //左:黄
glVertex3f(-40.0f, 40.0f, 40.0f);glVertex3f(-40.0f, 40.0f,-40.0f);glVertex3f(-40.0f,-40.0f,-40.0f);glVertex3f(-40.0f,-40.0f, 40.0f);
glColor3f(1.0f,0.0f,1.0f); //右:罗兰
glVertex3f( 40.0f, 40.0f,-40.0f);glVertex3f( 40.0f, 40.0f, 40.0f);glVertex3f( 40.0f,-40.0f, 40.0f);glVertex3f( 40.0f,-40.0f,-40.0f);
glEnd();
Rot += 10.0f;
if (Rot >360.0f)
Rot = 0.0f;
glutSwapBuffers();
}
LoadIdentity后,世界与局部坐标系重合。glTranslate先将物体的局部坐标系原点移至局部坐标系的(100,0,0 )处(该处也是世界坐标系的(100,0,0)处),然后局部坐标系 绕 局部坐标系的y轴旋转Rot度数。(这里物体和局部坐标系的关系始终都是)最后得到的结果应该是:
具体步骤如下:
将代码中Trans和Rotate换个位置(即先Rot,再Trans)。之后得到的结果是:物体的局部坐标系 先绕 局部坐标系的y轴转,然后局部系原点移至局部系(100,0,0)处。最后的结果:
具体步骤如下: