9512.net
甜梦文库
当前位置:首页 >> IT/计算机 >>

OpenGL 简介


OpenGL简介

共勉:读书为了明理,学习为了改变。

本讲内容
? OpenGL 概述 ? OpenGL 基本操作 ? OpenGL 综合实例

2010-10-25

2

学习目标
? 理解OpenGL的功能和组成 ? 掌握OpenGL的基本操作 ? 掌握基本OpenGL程序的开发方法

2010-10-25

3

OpenGL概述
? 动画的原理
?

计算机中动画的显示,利用了人类眼睛的视觉 暂留特征。如果不断在屏幕上显示内容相近的 图片或图形,由于眼睛的错觉,会使人感到这 些图片中的图形是活动的。 基本条件:所播放图片的 速度不能低于每秒24帧, 否则人眼对动画效果的感 受就不会那么连贯。
4

?

2010-10-25

OpenGL概述
? OpenGL的特点
?

OpenGL是用于开发交互式二维、三维图形应 用程序的优秀环境,涵盖从3D动画、CAD辅 助设计到可视化仿真等广泛的应用领域。 OpenGL自1992年出现以来,逐渐发展完善, 已成为开放的、独立于应用平台的图形标准。 一个典型的OpenGL应用程序可以在任何平台 上运行(需要使用目标系统的OpenGL库重新 进行编译即可)。
5

?

?

2010-10-25

OpenGL概述
? OpenGL的特点
?

OpenGL是图形与硬件的接口,包括100多个图 形函数用来建立三维模型和进行三维实时交互。 通过OpenGL的图形函数,开发人员不必编写 矩阵变换、外部设备访问等函数,大大简化了 三维图形的开发。 例如,三维图形单元、图形变换函数以及外部 设备访问函数等等。

?

?

2010-10-25

6

OpenGL概述
? OpenGL的功能
?

微软在Windows中包含了OpenGL,OpenGL可 以与Visual C++紧密接合,简单快捷地实现有 关计算和图形算法,并保证算法的正确性和可 靠性。 简单地说,OpenGL具有建模、变换、色彩处 理、光线处理、纹理影射、图像处理、动画及 物体运动模糊等功能。

?

2010-10-25

7

OpenGL概述
? OpenGL的功能 1、建模
OpenGL图形库除了提供基本的点、线、多边形的 绘制函数外,还提供了复杂的三维物体,如球、锥、 多面体、茶壶以及复杂曲线和曲面(例如Bezier、 Nurbs等曲线或曲面)的绘制函数。

2、变换
OpenGL图形库的变换包括基本变换和投影变换。 基本变换有平移、旋转、变比、镜像四种变换,投影 变换有平行投影(又称正射投影)和透视投影两种变 换。
2010-10-25 8

OpenGL概述
? OpenGL的功能 3、颜色模式设置
OpenGL颜色模式有两种,即RGB(RGBA)模式 和颜色索引(Color Index)模式。

4、光照和材质设置
OpenGL光有辐射光(Emitted Light)、环境光 (Ambient Light)、漫反射光(Diffuse Light)和镜面 光(Specular Light)。 材质是用光反射率来表示。客观世界中的物体最 终反映到人眼的颜色是光的红绿蓝分量与材质红绿蓝 分量的反射率相乘后形成的颜色。
2010-10-25 9

OpenGL概述
? OpenGL的功能 5、纹理映射(Texture Mapping)
利用OpenGL纹理映射功能可以十分逼真地表达物 体表面细节。

6、位图显示和图象增强
OpenGL的图象功能除了基本的拷贝和像素读写 外,还提供融合(Blending)、反走样(Antialiasing) 和雾(fog)的特殊图象效果处理。 以上三条可是被仿真物更具真实感,增强图形显 示的效果。
2010-10-25 10

OpenGL概述
? OpenGL的功能 7、双缓存动画(Double Buffering)
OpenGL使用了前台缓存和后台缓存交替显示场景 (Scene)技术,简而言之,后台缓存计算场景、生成 画面,前台缓存显示后台缓存已画好的画面。

8、特殊效果
利用OpenGL还能实现深度暗示(Depth Cue)、 运动模糊(Motion Blur)等特殊效果。运动模糊的绘 图方式,模拟物体运动时人眼观察所感觉的动感现象。 深度域效果,类似于照相机镜头效果,模型在聚焦点 处清晰,反之则模糊。
2010-10-25 11

OpenGL概述
? OpenGL的基本工作流程
?

OpenGL要求把所有的几何图形单元都用顶点来描述,这样运 算器和逐个顶点计算操作都可以针对每个顶点进行计算和操 作,然后进行光栅化形成图形碎片;对于像素数据,像素操 作结果被存储在纹理组装用的内存中,再光栅化形成图形片 元。整个流程操作的最后,图形片元都要进行一系列的逐个 片元操作,这样最后的像素值送入帧缓冲器实现图形的显示。

2010-10-25

12

OpenGL概述
? OpenGL的基本工作流程 ? 用OpenGL进行图形操作直至在屏幕上渲染输出的基 本步骤:
1)根据基本图形单元建立景物模型,并且对所建立的模型进 行数学描述(点、线、多边形、图像和位图都作为基本图形 单元)。 2)把景物模型放在三维空间中的合适的位置,并且设置视点 以观察所感兴趣的景观。 3)计算模型中所有物体的色彩,同时确定光照条件、纹理粘 贴方式等。 4)把景物模型的数学描述及其色彩信息转换至计算机屏幕上 的像素,该过程即光栅化(rasterization)。
2010-10-25 13

OpenGL概述
? OpenGL的组成 OpenGL图形库采用C语言风格,提供大量的函 数来进行图形的处理和显示,它们分别属于 OpenGL的基本库、实用库、辅助库等不同的库。 1、核心库
它们是最基本的函数,其前缀是gl; 这部分函数用于常规、核心的图形处理,由gl.dll来负责 解释执行。

核心库中的函数可进一步分为以下几类函数。
2010-10-25 14

OpenGL概述
? OpenGL的组成
(1)绘制基本几何图元的函数。 (2)矩阵操作、几何变换和投影变换的函数。 (3)颜色、光照和材质的函数。 (4)显示列表函数。 (5)纹理映射函数。 (6)特殊效果函数。 (7)光栅化、象素操作函数。 (8)选择与反馈函数。 (9)曲线与曲面的绘制函数。 (10)状态设置与查询函数。

2010-10-25

15

OpenGL概述
? OpenGL的组成 2、实用库(OpenGL utility library,GLU)
包含的函数功能更高一些,如绘制复杂的曲线曲面、高 级坐标变换、多边形分割等,前缀为glu。此类函数由 glu.dll来负责解释执行。

主要包括了以下几种:
(1)辅助纹理贴图函数。 (3)多边形镶嵌工具。 (4)二次曲面绘制工具。 (6)错误反馈工具。

(2)坐标转换和投影变换函数。(5)非均匀有理B样条绘制工具。

2010-10-25

16

OpenGL概述
? OpenGL的组成 3、OpenGL辅助库(OpenGL auxiliary library, GLAUX)
包括简单的窗口管理、输入事件处理、某些复杂三维物 体绘制等函数,前缀为aux。此类函数由glaux.dll来负责 解释执行。

辅助库函数主要包括以下几类。
(1)窗口初始化和退出函数。 (4)三维物体绘制函数。 (2)窗口处理和时间输入函数。(5)其他。 (3)颜色索引装入函数。

2010-10-25

17

OpenGL概述
? OpenGL的组成 4、OpenGL工具库(penGL Utility Toolkit) 包含有30多个函数,函数名前缀为glut,此函数 由glut.dll来负责解释执行。 这部分函数主要包括:
(1)窗口操作函数。 (2)回调函数。 (3)创建复杂的三维物体 (创建网状体和实心体)。 (4)菜单函数。 (5)程序运行函数 glutMainLoop()。

2010-10-25

18

OpenGL概述
? OpenGL的组成 5、WGL函数 专门用于OpenGL和Windows窗口系统的联接, 其前缀为wgl,实现创建和选择图形操作描述表 以及在窗口内任一位置显示字符位图。 这类函数主要包括以下几类:
(1)绘图上下文相关函数。(3)覆盖层、地层和主平面层处理函数。 (2)文字和文本处理函数。(4)其他函数。

2010-10-25

19

OpenGL概述
? OpenGL的组成 6、还有几个Win32函数用来处理像素格式 (pixel formats)和双缓存。 由于它们是对Win32系统的扩展,因此不能应 用在其它OpenGL平台上。

2010-10-25

20

OpenGL基本操作
? OpenGL数据类型 OpenGL中也有整数、字节、浮点数等数据类型。 下表将OpenGL数据类型与相应的C类型进行对比。

注:在OpenGL也定义有GLvoid类型。
2010-10-25 21

OpenGL基本操作
? OpenGL库函数的命名规律
?

所有OpenGL函数采用了以下格式: <库前缀><根命令><可选的参数个数><可选的 参数类型>

?

库前缀有gl、glu、aux、glut、wgl、glx等等, 分别表示该函数属于OpenGL某开发库等。 从函数名后面中还可以看出需要多少个参数以 及参数的类型。I代表int型,f代表float型,d代 表double型,u代表无符号整型。
22

?

2010-10-25

OpenGL基本操作
? OpenGL库函数的命名规律 ? 有的函数参数类型后缀前带有数字2、3、4。2 代表二维,3代表三维,4代表alpha值。 ? 有些OpenGL函数最后带一个字母v,表示函数 参数可用一个指针指向一个向量(或数组)来 替代一系列单个参数值。 ? 下面两种格式都表示设置当前颜色为红色,二 者等价。
等价于: glColor3f(1.0,0.0,0.0); float color_array[] = {1.0,0.0,0.0}; glColor3fv(color_array);
23

2010-10-25

OpenGL基本操作
? OpenGL库函数的命名规律
?

除了以上基本命名方式外,还有一种带“*”星号 的表示方法。 例如glColor*(),它表示可以用函数的各种方式 来设置当前颜色。 同理,glVertex*v()表示用一个指针指向所有类 型的向量来定义一系列顶点坐标值。

?

?

2010-10-25

24

OpenGL基本操作
? 基本图元
?

任何复杂的三维模型都是由基本的几何图元: 点、线段和多边形组成的,有了这些图元,就 可以建立比较复杂的模型。 OpenGL图元是抽象的几何概念,须用相关的数 学模型来描述。所有的图元都是由一系列有顺 序的顶点集合来描述的。 OpenGL中使用glBegin()和glEnd() 绘制几何图 元,传递给glBegin()函数的参数确定要绘制的 几何图元;glEnd()函数标志顶点列表的结束。
25

?

?

2010-10-25

OpenGL基本操作
? 基本图元
?

例如,下面的代码绘制了一个多边形:
glBegin (GL_POLYGON); glVertex2f (0.0, 0.0); glVertex2f (0.0, 3.0); glVertex2f (3.0, 3.0); glVertex2f (4.0, 1.5); glVertex2f (3.0, 0.0); glEnd ( );

2010-10-25

26

OpenGL基本操作
? 基本图元 ? 函数glBegin(GLenum mode)标志描述一个几何 图元的顶点列表的开始,其参数mode表示几何 图元的描述类型,具体类型见下表:

2010-10-25

27

OpenGL基本操作
? 基本图元 ? 在glBegin()和glEnd()之间最重要的信息就是由 函数glVertex*()定义的顶点,必要时也可为每个 顶点指定颜色、法向、纹理坐标或其他。

2010-10-25

28

OpenGL基本操作
? 基本图元 ? 点(Point) 用浮点值表示的点称为顶点(Vertex)。所有顶点 在OpenGL内部计算时都使用三维坐标(x,y,z) 来处理,用二维坐标(x,y)定义的点在OpenGL中 默认z值为0。 可以用glVertex{234}{sifd}[V](TYPE cords)函数 来定义一个顶点。 例如:
glVertex2f (2.0f, 3.0f);
2010-10-25

// 二维坐标定义顶点
29

OpenGL基本操作
? 基本图元 ? 线(Line) 在OpenGL中,线代表线段(Line Segment):由 一系列顶点顺次连结而成,并分为独立线段、 条带和封闭条带三种。 OpenGL能指定线的宽度并绘制不同的虚点线, 如点线、虚线等。相应的函数形式如下: void glLineWidth(GLfloat width); 设置线宽(以像素为单位)。参数width必须大 于0.0,缺省时为1.0。
2010-10-25 30

OpenGL基本操作
? 基本图元 ? void glLineStipple(GLint factor,GLushort pattern); 设置当前线为虚点模式。
参数factor是个比例因子,用来拉伸pattern中的元素,即 重复绘制1或移动0。比如,factor为2,则碰到1时就连续 绘制2次,碰到0时连续移动2个单元。factor的大小范围在 1到255之间。 参数pattern是一系列的16位二进制数,它重复地赋给所指 定的线,每一个二进制位代表一个象素, 1表示用当前颜 色绘制一个象素(或比例因子指定的个数),0表示当前 不绘制,只移动一个象素位(或比例因子指定的个数)。
2010-10-25 31

OpenGL基本操作
? 基本图元 ? 在绘制虚点线之前必须先启动虚点模式,即调 用函数glEnable(GL_LINE_STIPPLE);结束时, 调用glDisable(GL_LINE_STIPPLE)关闭。
void line2i (GLint x1,GLint y1,GLint x2,GLint y2) { glBegin (GL_LINES); glVertex2f (x1, y1); glVertex2f (x2, y2); glEnd (); } glLineStipple (1, 0x1C47); // 虚点线 glEnable (GL_LINE_STIPPLE); glColor3f (0.0, 1.0, 0.0); line2i (450 , 250 , 600 , 250 );
2010-10-25

绘制了一个点线的代码
32

OpenGL基本操作
? 基本图元 ? 多边形(Polygon) ? 凸、凹多边形。 OpenGL定义的多边形是由一系列线段依次连结 而成的封闭区域,多边形可以是平面多边形, 也可以是空间多边形。 OpenGL规定多边形中的线段不能交叉,区域内 不能有空洞,也即多边形必须是凸多边形(指 多边形任意非相邻的两点的连线位于多边形的 内部),不能是凹多边形,否则不能被OpenGL 函数接受。
2010-10-25 33

OpenGL基本操作
? 基本图元 ? 边界标志问题
实际应用中,往往需要绘制一些凹多边形。通常解决的办法 是对它们进行分割,用多个三角形来替代。显然,有些边不 应该进行绘制,否则多边形内部就会出现多余的线框。 OpenGL通过设置边标志命令glEdgeFlag()来控制某些边产 生绘制,而另外一些边不产生绘制,这也称为边界标志线或 非边界线。
?

这个命令的定义如下:
void glEdgeFlag (GLboolean flag); void glEdgeFlag (PGLboolean pflag);
2010-10-25 34

OpenGL基本操作
? 基本图元
?

多边形绘制模式
包括全填充式、轮廓点式、轮廓线式、图案填充式及指定正反面等。

1)多边形模式设置 void glPolygonMode(GLenum face,GLenum mode);
face为GL_FRONT、GL_BACK或GL_FRONT_AND_BACK; mode为GL_POINT、GL_LINE或GL_FILL,分别表示绘制轮 廓点式多边形、轮廓线式多边形或全填充式多边形。 在OpenGL中,多边形分为正面和反面,对这两个面都可以进 行操作,在缺省状况下,OpenGL对多边形正反面是以相同的 方式绘制的,调用PolygonMode ( )函数改变绘制状态。
2010-10-25 35

OpenGL基本操作
? 基本图元 2)设置设置图案填充式多边形。 void glPolygonStipple(const GLubyte *mask); 参数mask是一个指向32x32位图的指针。与虚点线绘 制的道理一样,某位为1时绘制,为0时什么也不绘。 注意,在调用这个函数前,必须先启动 glEnable(GL_POLYGON_STIPPLE);不用时用 glDisable(GL_POLYGON_STIPPLE)关闭。
2010-10-25 36

OpenGL基本操作
? 基本图元 3)指定多边形的正反面 void glFrontFace(GLenum mode); 在正常情况下,OpenGL中的多边形的正面和反面是 由绘制的多边形的顶点顺序决定的,逆时针绘制的面 是多边形的正面。 但是,在OpenGL中使用该函数可 以自定义多边形的正面。 该函数的参数mode指定了正面的方向。它可以是 CL_CCW和CL_CW,分别指定逆时针和顺时针方向 为多边形的正方向。
2010-10-25 37

OpenGL基本操作
? 显示列表
?

定义显示列表 前面所举出的例子都是瞬时给出函数命令, OpenGL瞬时执行相应的命令,这种绘图方式叫 做立即或瞬时方式(immediate mode)。 OpenGL显示列表(Display List)是由一组预先 存储起来的留待以后调用的OpenGL函数语句组 成的,当调用显示列表时就依次执行表中所列 出的函数语句。

2010-10-25

38

OpenGL基本操作
? 显示列表
?

显示列表可以用在以下场合: 1)矩阵操作
大部分矩阵操作需要OpenGL计算逆矩阵,矩阵及 其逆矩阵都可以保存在显示列表中。

2)光栅位图和图像
程序定义的光栅数据不一定是适合硬件处理的理想 格式。当编译组织一个显示列表时,OpenGL可能把数 据转换成硬件能够接受的数据,这可以有效地提高画位 图的速度。
2010-10-25 39

OpenGL基本操作
? 显示列表 3)光、材质和光照模型
当用一个比较复杂的光照环境绘制场景时,材质计 算可能比较慢。若把材质定义放在显示列表中,则每次 改换材质时就不必重新计算了,能更快地绘制光照场景。

4)纹理
由于硬件的纹理格式可能与OpenGL格式不一致, 若把纹理定义放在显示列表中,则在编译显示列表时就 能对格式进行转换,而不是在执行中进行,这样就能大 大提高效率。
2010-10-25 40

OpenGL基本操作
? 显示列表 5)多边形的图案填充模式
OpenGL提供类似于绘制图元的结构即类似于 glBegin()与glEnd()的形式创建显示列表,其相应函数为:
void glNewList(GLuint list,GLenum mode); void glEndList(void); glNewList()函数说明一个显示列表的开始,其后的OpenGL函数存入 显示列表中,直至调用结束表的函数glEndList(void)。 其中参数list是一个正整数,它标志唯一的显示列表;参数mode的可 能值有GL_COMPILE和GL_COMPILE_AND_EXECUTE;若要使列表 中函数语句只存入而不执行,则用GL_COMPILE;若要使列表中的函 数语句存入表中且按瞬时方式执行一次,则用 GL_COMPILE_AND_EXECUTE。 2010-10-25 41

OpenGL基本操作
? 显示列表 注:并不是所有的OpenGL函数都可以在显示列 表中存储且通过显示列表执行。 ? 在建立显示列表以后就可以调用执行显示列表 的函数来执行它,并且允许在程序中多次执行 同一显示列表。 ? 显示列表执行的函数形式如下: void glCallList(GLuint list); 参数list指定被执行的显示列表。显示列表中的 函数语句按它们被存放的顺序依次执行;若list 没有定义,则不会产生任何事情。
2010-10-25 42

OpenGL基本操作
? 使用颜色 ? OpenGL颜色模式有两个:RGB(RGBA)模式和 颜色表模式。 ? RGB(RGBA)模式
颜色的定义使用R、G、B三个值表示,A表示透明度的 Alpha值。其取值在0-1.0之间。

使用glColor*()来定义当前颜色:
void void void void
2010-10-25

glColor3 { b s i f d ub us ui }(type r, type g, type b); glColor4 { b s i f d ub us ui }(type r, type g, type b, type a); glColor3 { b s i f d ub us ui }v (type *v); glColor4 { b s i f d ub us ui }v (type *v);
43

OpenGL基本操作
? 使用颜色 ? 颜色表模式
每一个像素的颜色是用颜色表中的某个颜色索引值表 示,该索引值指向相应的R、G、B值。

用glIndex*()函数从颜色表中选取当前的颜色:
void glIndex { s i f d } (type c); void glIndex { s i f d } v (type *c);

设置当前颜色索引值,若值大于颜色位面数, 则取模。
2010-10-25 44

OpenGL基本操作
? 光照 ? OpenGL简单光照模型中的光分为辐射光、环境 光、漫反射光和镜面光。
?

创建光源 void glLight{i f} [v] (GLenum light, Glenum pname, TYPE param) light指定所创建的光源号(GL_LIGHT0等); pname指定光源特性(P206); param设置光源特性值。

2010-10-25

45

OpenGL基本操作
? 光照
?

启动光照 如果光照无效则只是简单地将当前颜色映射到 当前顶点上去,不进行法向、光源、材质等复 杂计算,显示的图形也没有真实感。 启动光照的函数 void glEnable (GL_LIGHTING); 关闭光照的函数 void glDisable (GL_LIGHTING);
46

?

?

2010-10-25

OpenGL基本操作
? 明暗处理 ? 光滑曲面表面常用多边形予以逼近和表示,而每个小 多边形轮廓或内部就用单一或许多不同的颜色来勾画 或填充,称为明暗处理。 ? 用单一颜色处理的称为平面明暗处理,多边形内每个 点的法向一致,颜色也一致。 ? 用许多不同颜色处理的称为光滑明暗处理,多边形内 每个点的法向由内插生成,每个点的颜色也不同。 ? 设置明暗处理模式的函数为: void glShadeModel ( GLenum mode); 参数取GL_FLAT或GL_SMOOTH.
2010-10-25 47

OpenGL基本操作
? 材质 ? OpenGL用材料对光的红、绿、蓝三原色的反射 率来近似定义材料的颜色。 ? 材料颜色分为环境、漫反射、镜面反射。它们 决定了材料对环境光、漫反射光、镜面反射光 的反射程度。 ? 材质定义函数 void glMaterial {i f } [v] (GLenum face, GLenum pname, TYPE param);
face可以是GL_FRONT、GL_BACK、GL_FRONT_AND_BACK, 表明当前材质应该应用到物体的哪一个面上;pname说明一个特定 的材质(P207);param是材质的具体数值。
2010-10-25 48

OpenGL基本操作
? 材质 ? 改变材质颜色的函数: void glColorMaterial ( GLenum face, GLenum mode);
face指定面可以是GL_FRONT、GL_BACK、 GL_FRONT_AND_BACK; mode指定材质成分,如GL_AMBIENT、GL_DIFFUSE、 GL_AMBIENT_AND_DIFFUSE、GL_SPECULAR等。
?

当需要改变场景中单个材质时,最好调用 glColorMaterial();当需要修改不止一个材质颜 色时,最好调用glMaterial*()。
49

2010-10-25

OpenGL基本操作
? 位图和图像 ? 位图和图像都是OpenGL中的两种重要的数据 类,位图包含每个像素的信息;图像包含每个 像素的多位信息(红、绿、蓝、Alpha)。 ? 位图可用于遮掩别的图像,而图像则简单覆盖 先前已经存在的数据或与之混合。 ? 位图 要显示位图,必须先设置光栅位置。当前光栅 位置函数:
void glRasterPos {234} {s i f d} [v] (TYPE x, TYPE y, TYPE z, TYPE w);
2010-10-25 50

OpenGL基本操作
? 位图和图像
?

设置了光栅位置后,调用glBitmap()函数来显示 位图数据。
void glBitmap (GLsizei width, GLfloat xbo, GLfloat xbi, const GLubyte GLsizei height, GLfloat ybo, GLfloat ybi, *bitmap);

width和height以像素为单位说明位图的宽和 高;xbo和ybo定义位图的原点;xbi和ybi指出在 位图光栅位置的增量。
2010-10-25 51

OpenGL基本操作
? 位图和图像 ? OpenGL图像包括像素读写、拷贝、缩放等。
?

读取像素数据
void glReadPixels (GLint x, GLint y, GLSizesi width, GLsizesi height, GLenum format, GLenum type, GLvoid *pixel);

(x, y)定义图像区域左上角的坐标;width和 height分别是图像的宽和高;format指出所读像 素数据元素的格式(P210);type指出每个元 素的数据类型(P210) 。
2010-10-25 52

OpenGL基本操作
? 位图和图像
?

写入像素数据
void glDrawPixels (GLSizesi width, GLsizesi height, GLenum format, GLenum type, GLvoid *pixel);

?

像素拷贝
void glCopyPixels (GLint x, GLint y, GLSizesi width, GLsizesi height, GLenum type);

?

图像缩放
void glPixelZoom (GLfloat zoomx, GLfloat zoomy);

2010-10-25

53

OpenGL基本操作
? 纹理
?

对于描述具有真实感的物体,纹理映射的方法 运用较广。 基本的执行纹理映射所需的步骤:
(1)定义纹理 (2)控制滤波 (3)说明映射方式 (4)绘制场景,给出顶点的纹理坐标和几何坐标。

?

2010-10-25

54

OpenGL基本操作
? 定义纹理 ? 一维纹理的定义
void glTextImage1D ( GLenum target, GLint level, GLint components, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); target是常数GL_TEXTURE_1D; level表示多级分辨率的纹理图像的级数; components指出选择R、G、B、A中哪些分量用于调整 和混合; width和height分别是纹理图像的宽和高; border是纹理边界宽度; format和type描述了纹理映射的格式和数据类型;
55

? ? ?

? ? ?

2010-10-25

OpenGL基本操作
? 定义纹理 ? 二维纹理的定义
void glTextImage2D ( GLenum target, GLint level, GLint components, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); target是常数GL_TEXTURE_2D; level表示多级分辨率的纹理图像的级数; components指出选择R、G、B、A中哪些分量用于调整 和混合; width和height分别是纹理图像的宽和高; border是纹理边界宽度; format和type描述了纹理映射的格式和数据类型;
56

? ? ?

? ? ?

2010-10-25

OpenGL基本操作
? 控制滤波
?

一般纹理图像为正方形或长方形,当映射到曲 面上,纹理的单个纹素很少对应于屏幕图像上 的像素。 屏幕上单个像素可以对应于一个纹理的一小部 分(即放大),或一大批纹素(即缩小)。 函数glTexParameter*()进行放大或缩小:
纹理的维数

?

?

void glTexParameter* (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 放大滤波 void glTexParameter* (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 缩小滤波
2010-10-25

采用坐标最靠近像素中心的纹素

57

OpenGL基本操作
? 重复与缩限
?

纹理坐标可以超出(0, 1)范围,在纹理映射过程 中,可以重复映射或约简映射。在重复映射的 情况下,纹理可以在s、t方向上重复。
void glTexParameterfv (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); void glTexParameterfv (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

?

屏幕上单个像素可以对应于一个纹理的一小部 分(即放大),或一大批纹素(即缩小)。
58

2010-10-25

OpenGL基本操作
? 说明映射方式 ? 可以用纹理中的值来调整多边形(曲面)原来的颜色; 或用纹理图像中的颜色与多边形(曲面)原来的颜色进 行混合。
?

OpenGL提供了三种纹理映射的方式:
void glTexEnv {i f} [v] (GLenum target, GLenum_pname, TYPE param);

?

target为GL_TEXTURE_ENV;pname是GL_TEXTURE_ENV_MODE,则 param可以是GL_DECAL、GL_MODULATE或GL_BLEND,以说明纹理值 怎样参与原来表面颜色的处理方式;若参数pname是 GL_TEXTURE_ENV_COLOR,则param是包含四个浮点数的数组,这些 值只在采用GL_BLEND纹理函数时才有用。
2010-10-25 59

OpenGL基本操作
? 纹理坐标 ? 在绘制纹理映射场景时,不仅要给每个顶点定义几何 坐标,而且还要定义纹理坐标。
?

几何坐标决定顶点在屏幕上绘制的位置,纹理坐标则 决定纹理图像中的哪一个纹理赋予该顶点。

? ?

顶点之间的纹理坐标插值与平滑着色插值方法相同。 纹理坐标通常定义为一、二、三、四维形式,称为s、 t、r和q坐标。 OpenGL坐标定义的函数:
void gltexCoord {1234} {s i f d} [v] (TYPE coords);
2010-10-25 60

?

一分耕耘 一分收获

2010-10-25

61


赞助商链接

更多相关文章:
opengl简介
3页 免费 OPENGL简介 30页 免费如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 opengl简介 简单介绍opengl的一些常识简单...
OpenGL 简介(中英文翻译)
OpenGL 简介(中英文翻译)_英语学习_外语学习_教育专区。译文: OpenGL 简介 OpenGL 是一个底层图形库规范。 它为程序员提供了一个小的几何图元 (点、 线、 ...
opengl简介及实例
opengl简介及实例_IT/计算机_专业资料。自己整理的哈!C# 实例 OpenGL 是图形硬件的一个软件接口,是一种快速、高质量的 3D 图形软件。它提供了近 120 个绘制点、...
OpenGL简介--显示列表
opengl简介 9页 1下载券 OpenGL 6显示列表 暂无评价 11页 免费 OPENGL简介 30...OpenGL 显示列表是一组预先存储起来的 OpenGL 命令。显示列表可以在任何地方被调...
第一章 OpenGL简介
第一章 OpenGL 简介 第一节:OpenGL 使人们进入三维图形世界 我们生活在一个充满三维物体的三维世界中, 为了使计算机能精确地再现这些物体, 我 们必须能在三维空间...
[已读]OpenGLOpenGL ES、OpenVG、GLX、EGL简介
OpenGLOpenGL ES、OpenVG、GLX、EGL 简介今天研究了一些和图形处理相关的技术, 其中遇到了一些让人费解的缩写, 晚上我抽空 整理了如下,希望对大家有点帮助。 (...
OpenGL的库函数介绍
OpenGL的库函数介绍_计算机软件及应用_IT/计算机_专业资料。OpenGL 的库函数介绍开发基于 OpenGL 的应用程序,必须先了解 OpenGL 的库函数。 OpenGL 库函数的命名方式...
OpenGL坐标系介绍
OpenGL坐标系介绍_计算机软件及应用_IT/计算机_专业资料。OpenGL坐标系介绍 OpenGL 的坐标系、投影和几何变换按:我也是在迷茫中走过来的,初学 OpenGL 时,略微了解...
openGL渲染管线简介
openGL渲染管线简介_计算机软件及应用_IT/计算机_专业资料。介绍OpenGL管线各个阶段功能和流程。openGL 渲染管线 openGL 管线包含一系列处理阶段。定点数据和像素数据进入...
OpenGL 中文API
OpenGL 中文API_计算机软件及应用_IT/计算机_专业资料。中文的API? ? ? ? ? ? ? ? ? ? 转: OpenGL API 简介 开发基于 OpenGL 的应用程序,必须先了解 Ope...
更多相关标签:

All rights reserved Powered by 甜梦文库 9512.net

copyright ©right 2010-2021。
甜梦文库内容来自网络,如有侵犯请联系客服。zhit325@126.com|网站地图