在上一篇中的环境配置没有问题,估计程序出现了问题。
OpenGL实用库函数:43个,以glu作为前缀;
OpenGL辅助库函数:31个,以aux作为前缀;
Windows专用库函数(WGL):6个,以wgl作为前缀;
win32API函数(WGL):5个,无前缀。
首先创建工程,步骤如下:
(1)创建Win32 Console Application
(2)在附加依赖库上加入opengl32.lib;glut32.lib;glu32.lib
代码如下:
#include <gl/glut.h>
void renderScene(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //清除缓冲,GL_COLOR_BUFFER_BIT :颜色缓冲标志位
glLoadIdentity(); //重置当前矩阵为4*4的单位矩阵
//glRotatef(-135,0.5,0.0,0.0); //旋转
//glTranslatef(0.5,0.5,0.0); //移动原点
//glScalef(0.5,0.5,1); //缩小
glBegin(GL_TRIANGLES);
glVertex3f(-0.5,-0.5,0.0);
glVertex3f(0.5,0.0,0.0);
glVertex3f(0.0,0.0,0.0);
glEnd();
glutSwapBuffers(); //交换两个缓冲区指针
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);//初始化glut库
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);//设置初始显示模式
glutInitWindowPosition(100,100);
glutInitWindowSize(600,600);
glutCreateWindow("*************");
glutDisplayFunc(renderScene);
glutMainLoop();//enters the GLUT event processing loop.
return 0;
}
说明:
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
函数功能:设置初始显示模式;
值 | 对应宏定义 | 意义 |
---|---|---|
GLUT_RGB | 0x0000 | 指定RGB颜色模式的窗口 |
GLUT_RGBA | 0x0000 | 指定RGBA 颜色模式的窗口 |
GLUT_INDEX | 0x0001 | 指定颜色索引模式的窗口 |
GLUT_SINGLE | 0x0000 | 指定单缓存窗口 |
GLUT_DOUBLE | v0x0002 | 指定双缓存窗口 |
GLUT_ACCUM | 0x0004 | 窗口使用累加缓存 |
GLUT_ALPHA | 0x0008 | 窗口的颜色分量包含 alpha 值 |
GLUT_DEPTH | 0x0010 | 窗口使用深度缓存 |
GLUT_STENCIL | 0x0020 | 窗口使用模板缓存 |
GLUT_MULTISAMPLE | 0x0080 | 指定支持多样本功能的窗口 |
GLUT_STEREO | 0x0100 | 指定立体窗口 |
GLUT_LUMINANCE | 0x0200 | 窗口使用亮度颜色模型 |
glutDisplayFunc(renderScene);
glutDisplayFunc(void(*func)(void));
函数功能:注册当前窗口的显示回调函数,执行绘制操作。
参数:
func:形为void func()的函数,完成具体的绘制操作。
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
函数功能:表明需要清除的缓冲标志位
GL_COLOR_BUFFER_BIT :当前可写的颜色缓冲
GL_DEPTH_BUFFER_BIT :深度缓冲
GL_ACCUM_BUFFER_BIT:累积缓冲
GL_STENCIL_BUFFER_BIT:模板缓冲
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
第一条语句表示清除颜色设为黑色,第二条语句表示实际完成了把整个窗口清除为黑色的任务,glClear()的唯一参数表示需要被清除的缓冲区。
像素检验、裁剪检验、抖动和缓存的写屏蔽都会影响glClear的操作,其中,裁剪范围限制了清除的区域,而glClear命令还会忽略alpha函数、融合函数、逻辑操作、模板、纹理映射和z缓存;
glBegin(GL_TRIANGLES);
函数功能:绘制图像
GL_POINTS:把每一个顶点作为一个进行处理,顶点n即定义了点n,共绘制N个点。
GL_LINES:把每一个顶点作为一个独立的线段,顶点2n-1和2n之间共定义了点n,共绘制了N/2条线段。
GL_LINE_STRIP:绘制从第一个顶点到最后一个顶点一次相连的一组线段,第n和n+1个顶点定义了线段n,总共绘制n-1条线段。
GL_LINE_LOOP:绘制从第一个顶点到最后一个顶点依次相连的一组线段,然后最后一个顶点和第一个顶点相连,第n和n+1个顶点定义了线段n,总共绘制n条线段。
GL_TRIANGLES:把每个顶点作为一个独立的三角形,顶点3n-2、3n-1和3n定义了第n个三角形,总共绘制N/3个三角形。
GL_TRIANGLES_STRIP:绘制一组相连的三角形,对于奇数n,顶点n、n+1和n+2定义了第n个三角形;对于偶数n,顶点n+1、n和n+2定义了第n个三角形,总共绘制N-2个三角形。
GL_TRIANGLE_FAN:绘制一组相连的三角形,三角形是由第一个顶点及其后给定的顶点确定,顶点1、n+1和n+2定义了第n个三角形,总共绘制N-2个三角形。
GL_QUADS:绘制由四个顶点组成的一组单独的四边形。顶点4n-3、4n-2、4n-1和4n定义了第n个四边形。总共绘制N/4个四边形。
GL_QUAD_STRIP:绘制一组相连的四边形。每个四边形是由一对顶点及其后给定的一对顶点共同确定的。顶点2n-1、2n、2n+2和2n+1定义了第n个四边形,总共绘制N/2-1个四边形。
GL_POLYGON:绘制一个凸多边形。顶点1到n定义了这个多边形。
glBegin()和glEnd()之间可调用的函数
glVertex*() 设置顶点坐标
glColor*() 设置当前颜色
glIndex*() 设置当前颜色表
glNormal*() 设置法向坐标
glEvalCoord*() 产生坐标
glCallList(),glCallLists() 执行显示列表
glTexCoord*() 设置纹理坐标
glEdgeFlag*() 控制边界绘制
glMaterial*() 设置材质
OpenGL空间方位为:屏幕水平方向向右为X轴,屏幕垂直方向向上为Y轴,屏幕垂直方向向外为Z轴。
glTranslatef();glScalef();glRotatef()等接口的作用是对当前模型空间进行几何转换,要在调用glBegin()和glEnd()接口之前进行处理。
glRotatef(angle,x,y,z);
函数功能:将图形以a(x,y,z)向量为旋转轴旋转angle角度,旋转遵循右手规则。
glTranslatef(x,y,z);
函数功能:移动图形的原点。
glScalef(x,y,z);
函数功能:模型缩放。
glutSwapBuffers();
函数功能:交换两个缓冲区指针。
glutMainLoop();
函数功能:进入GLUT事件处理循环,让所有的与“事件”有关的函数调用无限循环。