glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
//第一行把清除颜色设置为黑色
//第二行把整个窗口清除为当前清除颜色,参数表示需要清除的缓冲区
glClearDepth(1.0); //指定了深度缓冲区中的每个像素需要设置的值。
glClearIndex(),glClearAccum(),glClearStencil()
glClear()函数的参数:
颜色缓冲区 GL_COLOR_BUFFER_BIT
深度缓冲区 GL_DEPTH_BUFFER_BIT
累积缓冲区 GL_ACCUM_BUFFER_BIT
模板缓冲区 GL_STENCIL_BUFFER_BIT
设置颜色: glColor3f(r,g,b);
glFlush(): 不等待绘图完成,强制绘图命令开始执行。
绘制几何图元,glBegin(GLenum mode):
GL_POINT: 单个点
GL_LINES: 一对顶点被解释为一条直线
GL_LINE_STRIP: 一系列的连接直线
GL_LINE_LOOP: 和上面相同,但始终点相连
GL_TRIANGLES: 三角形
GL_TRIANGLE_STRIP: 三角形的连接串(可画圆)
GL_TRIANGLE_FAN: 连接成扇形的三角形系列(可画圆)
GL_QUADS: 四边形
GL_QUAD_STRIP: 四边形的连接串
GL_POLYGON: 多边形
glEnd();
glBegin()和glEnd()之间的合法函数:
glVertex*(): 设置顶点坐标 //只有这类函数才能显示生成顶点
glColor*(): 设置RGBA颜色
glIndex*(): 设置颜色索引
glSecondaryColor(): 设置纹理应用后的辅助颜色
glNormal*(): 设置法线向量坐标
glMaterialf(): 设置材质属性
glFogCoord*(): 设置雾坐标
glTexCoord*(): 设置纹理坐标
glVertexAttrib*(): 设置通用的顶点属性
glEdgeFlag*(): 控制边界的控制
glArrayElement():提取顶点数组数据
glEvalCoord*(),glEvalPoint*(): 生成坐标
glCallList(),glCallLists(): 执行显示列表
打开或关闭一些状态(默认关闭):
void glEnable(GLenum cap);
void glDisable(GLenum cap);
GL_BLEND(控制RGB的混合),GL_DEPTH_TEST(深度测试,并对深度缓冲区进行更新),GL_FOG(控制雾),
GL_LINE_STIPPLE(直线的点画模式),GL_LIGHTING(光照)等等.
查询一个状态是处于打开还是关闭状态:
GLboolean glIsEnabled(GLenum cap); //return GL_TRUE or GL_FALSE
设置被渲染点的大小:
void glPointSize(GLfloat size); //单位像素,默认为1
设置直线的宽度:
void glLineWidth(GLfloat width);
点画线:
glLineStipple(1,0x3F07); //定义点画模式
glEnable(GL_LINE_STIPPLE); //启动直线点画功能
多边形渲染模式:
void glPolygonMode(GLenum face, GLenum mode);
face可以是:GL_FRONT_AND_BACK,GL_FRONT,GL_BACK; mode可以是:GL_POINT,GL_LINE,GL_FILL
eg: //正面填充,背面轮廓
glPolygonMode(GL_FRONT,GL_FILL);
glPolygonMode(GL_BACK,GL_LINE);
沿x,y,z轴移动: glTranslate(x,y,z);
eg:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity(); //重置模型观察矩阵,将当前点移到了屏幕中心:
glBegin(GL_TRIANGLES); //在外面调用glColor3f一次性设置所有的点颜色
glColor3f(1.0f,0.0f,0.0f); //设置当前点为红色
glVertex3f(0.0f,1.0f,0.0f);
glColor3f(0.0f,1.0f,0.0f); //设置当前点为绿色
glVertex3f(-1.0f,-1.0f,0.0f);
glVertex3f(1.0f,-1.0f,0.0f);
glEnd();
glTranslatef(3.0f,0.0f,0.0f);
绕坐标轴旋转:
glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
创建3D物体:
int DrawGLScene(GLvoid){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(-1.5f,0.0f,-6.0f);
glRotatef(rtri,0.0f,1.0f,0.0f);//绕y轴旋转金字塔
glBegin(GL_TRIANGLES);
glColor3f(1.0f,0.0f,0.0); //前侧面
glVertex3f(0.0f,1.0f,0.0f);
glColor3f(0.0f,1.0f,0.0f);
glVertex3f(-1.0f,-1.0f,1.0f);
glColor3f(0.0f,0.0f,1.0f);
glVertex3f(1.0f,-1.0f,1.0f);
glColor3f(1.0f,0.0f,0.0f); //右侧面(逆时针)
glVertex3f(0.0,1.0f,0.0f);
glColor3f(0.0f,0.0f,1.0f);
glVertex3f(1.0f,-1.0f,1.0f);
glColor3f(0.0f,1.0f,0.0f);
glVertex3f(1.0f,-1.0f,-1.0f);
glColor3f(1.0f,0.0f,0.0f); // 后侧面
glVertex(0.0f,1.0f,0.0f);
glColor3f(0.0f,1.0f,0.0f);
glVertex3f(1.0f,-1.0f,-1.0f);
glColor3f(0.0f,0.0f,1.0f);
glVertex3f(-1.0f,-1.0f,-1.0f);
glColor3f(1.0f,0.0f,0.0f); //左侧面
glVertex3f(0.0f,1.0f,0.0f);
glColor3f(0.0f,0.0f,1.0f);
glVertex3f(-1.0f,-1.0f,-1.0f);
glColor3f(0.0f,1.0f,0.0f);
glVertex3f(-1.0f,-1.0f,1.0f);
glEnd(); //金字塔绘制结束
glLoadIdentity(); //绘制立方体
glTranslate(1.5f,0.0f,-7.0f); //先右移再移入屏幕
glRotatef(rquad,1.0f,1.0f,1.0f); //在xyz轴上旋转立方体
glBegin(GL_QUADS);
glColor3f(0.0f,1.0f,0.0f); //顶面
glVertex3f(1.0f,1.0f,-1.0f);
glVertex3f(-1.0f,1.0f,-1.0f);
glVertex3f(-1.0f,1.0f,1.0f);
glVertex3f(1.0f,1.0f,1.0f);
glColor3f(1.0f,0.5f,0.0f); //底面,橙色
glVertex3f(1.0f,-1.0f,-1.0f);
glVertex3f(-1.0f,-1.0f,-1.0f);
glVertex3f(-1.0f,-1.0f,1.0f);
glVertex3f(1.0f,-1.0f,1.0f);
glColor3f(1.0f,0.0f,0.0f) //前面
glVertex3f(1.0f,1.0f,1.0f);
glVertex3f(-1.0f,1.0f,1.0f);
glVertex3f(-1.0f,-1.0f,1.0f);
glVertex3f(1.0f,-1.0f,1.0f);
glColor3f(1.0f,1.0f,0.0f); //后面,黄色
glVertex3f(1.0f,1.0f,-1.0f);
glVertex3f(-1.0f,1.0f,-1.0f);
glVertex3f(-1.0f,-1.0f,-1.0f);
glVertex3f(1.0f,-1.0f,-1.0f);
glColor3f(0.0f,0.0f,1.0f); //左面
glVertex3f(-1.0f,1.0f,1.0f);
glVertex3f(-1.0f,1.0f,-1.0f);
glVertex3f(-1.0f,-1.0f,-1.0f);
glVertex3f(-1.0f,-1.0f,1.0f);
glColor3f(1.0f,0.0f,1.0f); //右面,紫色
glVertex3f(1.0f,1.0f,-1.0f);
glVertex3f(1.0f,1.0f,1.0f);
glVertex3f(1.0f,-1.0f,1.0f);
glVertex3f(1.0,-1.0f,-1.0f);
glEnd();
rtri += 0.2f; //增加三角形的旋转变量
rquad -= 0.15f; //减少四边形的旋转变量
return TRUE;
}