开启深度测试
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)处。最后的结果:
具体步骤如下:

本文介绍了OpenGL中深度测试的概念及实现方法,并通过一个具体的示例详细解释了如何使用OpenGL进行三维物体的绘制,包括坐标变换操作如平移和旋转等。

被折叠的 条评论
为什么被折叠?



