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

在上一篇中的环境配置没有问题,估计程序出现了问题。

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事件处理循环,让所有的与“事件”有关的函数调用无限循环。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值