您的位置:首页 > 运维架构

OpenGL入门(二):第一个OpenGL程序

2017-03-02 11:18 489 查看
在上一篇中的环境配置没有问题,估计程序出现了问题。

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_RGB0x0000指定RGB颜色模式的窗口
GLUT_RGBA0x0000指定RGBA 颜色模式的窗口
GLUT_INDEX0x0001指定颜色索引模式的窗口
GLUT_SINGLE0x0000指定单缓存窗口
GLUT_DOUBLEv0x0002指定双缓存窗口
GLUT_ACCUM0x0004窗口使用累加缓存
GLUT_ALPHA0x0008窗口的颜色分量包含 alpha 值
GLUT_DEPTH0x0010窗口使用深度缓存
GLUT_STENCIL0x0020窗口使用模板缓存
GLUT_MULTISAMPLE0x0080指定支持多样本功能的窗口
GLUT_STEREO0x0100指定立体窗口
GLUT_LUMINANCE0x0200窗口使用亮度颜色模型
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事件处理循环,让所有的与“事件”有关的函数调用无限循环。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opengl