没有合适的资源?快使用搜索试试~ 我知道了~
OpenGL编程轻松入门
4星 · 超过85%的资源 需积分: 9 22 下载量 63 浏览量
2010-05-23
22:56:34
上传
评论
收藏 422KB DOC 举报
温馨提示
试读
46页
OpenGL编程轻松入门之使用颜色 OpenGL编程轻松入门之坐标变换 OpenGL编程轻松入门之堆栈操作 OpenGL编程轻松入门之显示例表 OpenGL编程轻松入门之使用光照和材质 OpenGL编程轻松入门之纹理映射 OpenGL编程轻松入门之特殊效果操作 OpenGL编程轻松入门之曲面和曲线 OpenGL编程轻松入门之NURBS曲线和曲面 OpenGL编程轻松入门之二次几何体 OpenGL编程轻松入门之动画制作
资源推荐
资源详情
资源评论
OpenGL 编程轻松入门
先编译运行一个简单的例子,这样我们可以有一个直观的印象
先编译运行一个简单的例子,这样我们可以有一个直观的印象。从这个例子我们可以
看到 OpenGL 可以做什么,当然这个例子只做了很简单的一件事 --绘制一个彩色的三角形。
除此以外,我们还可以看到典型的 OpenGL 程序结构及 openGL 的运行顺序。 例 1:本
例在黑色的背景下绘制一个彩色的三角形,如图一所示。
设置背景颜色为黑色
!
"#$%#
&''(&)*++,(&)-. / 设置为颜色可写
)&.(-01,2 开始画三角形
23&23''.4 设置为光滑明暗模式
567 设置第一个顶点为红色
89:6;7;7 设置第一个顶点的坐标为(;7,;7)
567 设置第二个顶点为绿色
89:6;7 设置第二个顶点的坐标为(,;7)
567 设置第三个顶点为蓝色
89:6;<7 设置第三个顶点的坐标为(;<,7)
, 三角形结束
+ 强制 '% 函数在有限时间内运行
!
"#(%=>=
8>%> 设置视口
393&?('@,.-'1 指 明 当 前 矩 阵 为
&?('@,.-'1
-# 将当前矩阵置换为单位阵
6>A
':$;77<;7<7<BCC> 定义
二维正视投影矩阵
':$;77<BC>C;7<7<
393&3'$,8-,D 指 明 当 前 矩 阵 为
&3'$,8-,D
!
"BB
B初始化B
-E
-$%#3*.&2-1,F*.&()
-D>2=GG
-D>?::
B创建窗口B
D>H.H
B绘制与显示B
(%+"#(%
$%#+"#$%#
3%
!
首先创建工程,其步骤如下: 1)创建一个 Win32 Console Application。 2)链接 OpenGL libraries。在
Visual C++中先单击 Project,再单击 Settings,再找到 Link 单击,最后在 Object/library modules 的最前面加上
OpenGL32.lib GLu32.lib GLaux.lib 3)单击 Project Settings 中的 C/C++标签,将 Preprocessor definitions 中的
_CONSOLE 改为__WINDOWS。最后单击 OK。
现在你可以把下面的例子拷贝到工程中去,编译运行。你可以看到一个彩色的三角形。
我们先看看 main 函数。函数中以 glut 开头的函数都包含在 glut.h 中。GLUT 库的函数主要执行如处理多窗口绘制、
处理回调驱动事件、生成层叠式弹出菜单、绘制位图字体和笔画字体,以及各种窗口管理等任务。
·glutInit 用来初始化 GLUT 库并同窗口系统对话协商。
·glutInitDisplayMode 用来确定所创建窗口的显示模式。本例中的参数 GLUT_SINGLE 指定单缓存窗口,这也是缺
省模式,对应的模式为 GLUT_DOUBLE 双缓存窗口。参数 GLUT_RGB 指定颜色 RGBA 模式,这也是缺省模式,对应
的模式为 GLUT_INDEX 颜色索引模式窗口。
·glutInitWindowSize 初始化窗口的大小,第一个参数为窗口的宽度,第二个参数为窗口的高度,以像素为单位。
·glutInitWindowPosition 设置初始窗口的位置,第一个参数为窗口左上角 x 的坐标,第二个参数为窗口左上角 y 的
坐标,以像素为单位。屏幕的左上角的坐标为(0,0),横坐标向右逐渐增加,纵坐标向下逐渐增加。
·glutCreateWindow 创建顶层窗口,窗口的名字为扩号中的参数。
·background() 这是自己写的函数,设置背景。其实这个函数中的语句可以写在 display 函数中,但为了使功能块
更加清晰,所以把背景这一部分单独提出来。
·glutReshapeFunc 注册当前窗口的形状变化回调函数。当改变窗口大小时,该窗口的形状改变回调函数将被调用 。
在此例中就是 myReshape 指定形状变化函数。
·glutDisplayFunc 注册当前窗口的显示回调函数。当一个窗口的图像层需要重新绘制时,GLUT 将调用该窗口的的
显示回调函数。在此例中的 mydisplay 就是显示回调函数,显示回调函数不带任何参数,它负责整个图像层的绘制。我
们的大部分工作将集中在这个函数中。
·glutMainLoop 进入 GLUT 事件处理循环。glutMainLoop 函数在 GLUT 程序中最多只能调用一次,它一旦被调用
就 不 再 返 回 , 并 且 调 用 注 册 过 的 回 调 函 数 。 所 以 这 个 函 数 必 须 放 在 注 册 回 调 函 数 的 后 面 , 此 例 中 为
glutReshapeFunc, glutDisplayFunc。
现在我们对 OpenGL 程序的典型的程序结构有了一个了解。首先初始化,包括对 GLUT 库的初始化和对窗口的设置及
显示模式的设置。第二,创建窗口。第三,自己创作的核心部分。第四,glutMainLoop 进入 GLUT 事件处理循环。
下面,我们转到我们的创作核心。
background 这个函数很简单,只有一行语句。glClearColor 中的四个参数分别是红、绿、蓝和 alpha 值。这些值
定义了窗口的颜色。这些值的范围在[0,1]之间。缺省值均为 0。你可以改变这些值,观察背景色彩的变化。
myDisplay 画了一个彩色的三角形。
·glClear 将 buffers 设置为预先设定的值。参数 GL_COLOR_BUFFER_BIT 表明现在可以向 buffer 中写入颜色值。
·glBegin 和 glEnd 是一一对应的。这两个函数限制了一组或多组图元的顶点定义。在这两个函数中间就是你所绘制
的由多个顶点组成的图元。函数的参数表明了所绘制的图元的类型。本例中的 GL_TRIANGLES 表明所绘制的图形为
三角形。
·glShadeModel 选择平坦或光滑渐变模式。GL_SMOOTH 为缺省值,为光滑渐变模式,GL_FLAT 为平坦渐变模式。
·glColor 设置当前颜色。后面跟的数字为参数个数。3 表明有三个参数,分别为红、绿、蓝,4 则多一个参数
alpha。紧跟数字后面的字母表示数据类型。本例中的 glColor3f 表示三个参数,数据类型为 GLfloat。
·glVertex 指定顶点。同样函数明中的数字表明参数个数。参数分别为 x,y 或 x、y、z。紧跟数字后面的字母表示
数据类型。本例中 glVertex2f 表明两个参数,数据类型为 GLfloat。窗口的中心为原心,坐标为(0,0,0)。横坐标
向左为负,向右为正;纵坐标向上为正,向下为负;z 坐标向屏幕里为负,屏幕外为正,坐标系符合右手定则。
现在你将 main 函数中的 glutReshapeFunc(myReshape); 注释掉,任意改变三角形顶点的坐标你会发现窗口的最
左边,最右边的 x 值分别为-1 和 1,而窗口的最上端,最下端的 y 值分别为 1 和-1。由此可见 glVertex 中坐标的值实际
上是和窗口的大小成倍数的关系。好了,现在恢复原来的程序。
·glFlush 迫使 OpenGL 函数在有限时间里运行。glFlush 清空所有 buffer,使所有发出的命令能在规定的时间内运
行。一定不能忘记这一条语句。只有加了这一句,前面的命令才能执行。
myReshape 改变窗口的大小。
·glViewport(Glint x,Glint y,GLsizei width,GLsizei height)设置视口。视口是一个矩形,x,y 为视口左下角
的坐标,以像素为单位,缺省值为(0,0)。 width 和 height 分别为视口的宽和高。OpenGl context 第一次贴到窗口
上时 width 和 height 分别设置成窗口的大小。
·glMatrixMode 指明哪一个矩阵为当前矩阵。本例中 GL_PROJECTION 指明投影矩阵堆栈为随后的矩阵操作的目
标。GL_MODELVIEW 指明模型视景矩阵。
·glLoadIdentity 将当前矩阵置换为单位阵。
·gluOrtho2D ( GLdouble left ,GLdouble right , GLdouble bottom ,GLdouble top )定 义 二 维 正视 投影 矩阵 。
left,right 分别设置左右垂直切平面的坐标,bottom,top 分别设置上下垂直切平面的坐标。
现在你可能对这几个参数的意义还不是很清楚。我们现在将 myReshape 函数 glLoadIdentity();后面所有的语句注
释 掉 。 加 上 gluOrtho2D(-1.5,1.5,-1.5,1.5); 改 变 三 角 型 的 坐 标 及 gluOrtho2D 中 的 数 值 , 你 就 可 以 清 楚 的 理 解
gluOrtho2D 中数值的含义。
现在,你应该大致了解 OpenGL 到底是怎么一回事。通过这一节的学习我们知道怎样使用颜色及绘制几何图形及
物体的最基本的函数,更多的函数你可以在网上或有关书中查到。下一节我们继续讲一下颜色的使用。
OpenGL 编程轻松入门之使用颜色
通过上一节的例子我们已经知道一些简单的使用颜色的方法。这一节我们进一步讲讲
颜色的使用。
例 2:本例子使用颜色引索模式绘制 8 个不同颜色的球体,如图二所示。阅读此例时,
请主要关注函数 palette 和 DrawColotFans。glIndex 设置当前颜色索引。参数为当前颜色索
引。本例中 glIndexd 函数的参数 j+1 对应 palette 中 auxSetOneColor 函数中的
i+1,auxSetOneColor 函数的后三个函数制定对应的颜色,颜色值由变量 rgb[8][3]定义。
9
7777
&''(&)*++,(&)-.
23&23''.4
!
%
CIJKI5KA7!7<!77!
7!77!7!77!7<!!
6A J LL
92'L7IKIKIKI7KIKI:K 设置颜色
!
!
$>+
M
.6;7<;7<
6MA MJ MLL
-9ML7 设置当前颜色索引
B在不同位置绘制球体B
.6MM;7
22%7::
!
!
0)0N%#
剩余45页未读,继续阅读
资源评论
- 熊熊爱吃饼2012-12-24略少略少,多写点
cnlcc
- 粉丝: 4
- 资源: 55
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功