首先请问,深度测试一定要做么,我看很多程序不用做依然能使3d图形颜色前后分开。
还有我做了一个立方体旋转,但自底向上旋转的时候 会出现如下情况:
底面为白色 正面为黄色 背面为红色
当底面自底向上转到正面的时候会出现 背面的红色覆盖了白色面 随着底面变换到正面 才全是白色
还有个问题 键盘响应极其慢 得4,5秒
代码如下:
#include "windows.h"
#include "stdafx.h"
#include <GL/glut.h> GLfloat rtri;
GLfloat a;
GLfloat b1,b2,b3;void Keyboard(unsigned char key,int x , int y)
{
if (key == '1')
    {
a=0.0000002;
b1=1.0;
b2=0.0;
b3=0.0;
}
else if (key == '2')
{
a=0.0000002;
b1=0.0;
b2=1.0;
b3=0.0;
}
else if (key =='3')
{
a=0.0000002;
b1=0.0;
b2=0.0;
b3=1.0;
}
}void renderScene(void) { //绘制一个简单的二维的三角形
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glRotatef(rtri,b1,b2,b3);
glBegin(GL_QUADS); 
glColor3f(0.0,1.0,0.0); // 颜色改为蓝色
glVertex3f( 0.5, 0.5,-0.5); // 四边形的右上顶点 (顶面)
glVertex3f(-0.5, 0.5,-0.5); // 四边形的左上顶点 (顶面)
glVertex3f(-0.5, 0.5, 0.5); // 四边形的左下顶点 (顶面)
glVertex3f( 0.5, 0.5, 0.5); // 四边形的右下顶点 (顶面)glColor3f(1.0,1.0,1.0); // 颜色改成橙色
glVertex3f( 0.5,0.5, 0.5); // 四边形的右上顶点(底面)
glVertex3f(-0.5,-0.5, 0.5); // 四边形的左上顶点(底面)
glVertex3f(-0.5,-0.5,-0.5); // 四边形的左下顶点(底面)
glVertex3f( 0.5,-0.5,-0.5); // 四边形的右下顶点(底面)glColor3f(1.0,0.0,0.0); // 颜色改成红色
glVertex3f( 0.5, 0.5, 0.5); // 四边形的右上顶点(前面)
glVertex3f(-0.5, 0.5, 0.5); // 四边形的左上顶点(前面)
glVertex3f(-0.5,-0.5, 0.5); // 四边形的左下顶点(前面)
glVertex3f( 0.5,-0.5, 0.5); // 四边形的右下顶点(前面)glColor3f(1.0,1.0,0.0); // 颜色改成黄色
glVertex3f( 0.5,-0.5,-0.5); // 四边形的右上顶点(后面)
glVertex3f(-0.5,-0.5,-0.5); // 四边形的左上顶点(后面)
glVertex3f(-0.5, 0.5,-0.5); // 四边形的左下顶点(后面)
glVertex3f( 0.5, 0.5,-0.5); // 四边形的右下顶点(后面)glColor3f(0.0,0.0,1.0); // 颜色改成蓝色
glVertex3f(-0.5, 0.5, 0.5); // 四边形的右上顶点(左面)
glVertex3f(-0.5, 0.5,-0.5); // 四边形的左上顶点(左面)
glVertex3f(-0.5,-0.5,-0.5); // 四边形的左下顶点(左面)
glVertex3f(-0.5,-0.5, 0.5); // 四边形的右下顶点(左面)glColor3f(1.0,0.0,1.0); // 颜色改成紫罗兰色
glVertex3f(0.5, 0.5,-0.5); // 四边形的右上顶点(右面)
glVertex3f( 0.5,0.5, 0.5); // 四边形的左上顶点(右面)
glVertex3f( 0.5,-0.5, 0.5); // 四边形的左下顶点(右面)
glVertex3f(0.5,-0.5,-0.5); // 四边形的右下顶点(右面)
       glEnd();
  rtri = rtri + a;
  glFlush();
 
} void main(int argc, char **argv) { 
glutInit(&argc, argv); //初始化glut
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); 
//设置窗口的模式-深度缓存,单缓存,颜色模型
glutInitWindowPosition(100,100); //设置窗口的位置
glutInitWindowSize(320,320); //设置窗口的大小
glutCreateWindow("3D Tech- GLUT Tutorial"); //创建窗口并赋予title
glEnable(GL_DEPTH_TEST);
 glDepthFunc(GL_LEQUAL);
 
glutDisplayFunc(renderScene);//调用renderScene把绘制传送到窗口
glutKeyboardFunc(Keyboard);
glutIdleFunc(renderScene);

      glutMainLoop(); //进入循环等待