计算机图形学(OpenGL总结)PPT课件.pptx

上传人:rrsccc 文档编号:9443206 上传时间:2021-02-26 格式:PPTX 页数:123 大小:3.67MB
返回 下载 相关 举报
计算机图形学(OpenGL总结)PPT课件.pptx_第1页
第1页 / 共123页
计算机图形学(OpenGL总结)PPT课件.pptx_第2页
第2页 / 共123页
计算机图形学(OpenGL总结)PPT课件.pptx_第3页
第3页 / 共123页
计算机图形学(OpenGL总结)PPT课件.pptx_第4页
第4页 / 共123页
计算机图形学(OpenGL总结)PPT课件.pptx_第5页
第5页 / 共123页
点击查看更多>>
资源描述

《计算机图形学(OpenGL总结)PPT课件.pptx》由会员分享,可在线阅读,更多相关《计算机图形学(OpenGL总结)PPT课件.pptx(123页珍藏版)》请在三一文库上搜索。

1、1,计算机图形学OpenGL总结,主讲人:桂进斌,2,参考书 1、OpenGL编程指南(第八版),Dave Shreiner等(李军等译),机械工业出版社,2014年。 2、计算机图形学(第四版),Donald Hearn,电子工业出版社,2014年。,3,学习内容,1、图形软件包 2、用VC+编写OpenGL程序 3、图形变换 4、图元绘制 5、颜色和光照 6、混合、反走样和雾化 7、显示列表、位图和图像 8、纹理映射 9、复杂图形绘制,4,一、图形软件包,1、Direct 3D和DirectX DirectX是微软公司的多媒体应用软件包,Direct 3D是其中的一部分。DirectX支持

2、图形、音响、应用程序安装和设备管理等。 Direct 3D至少支持游戏或其他应用中的12种3D图形效果处理。,5,一、图形软件包,2、Heidi Heidi主要应用于CAD和CAM技术中,如AutoCAD、3D Studio以及3DS MAX。 Heidi是专业性强的软件包,在CAD和CAM领域应用比较广泛,在其它领域如多媒体或游戏软件中应用较少。,6,一、图形软件包,3、OpenGL OpenGL是以SGI公司为首,联合IBM、Intel等8家公司共同制定的3D图形标准。 OpenGL与硬件无关、独立于操作系统、支持网络运行。,7,二、用VC+编写OpenGL程序,1、OpenGL函数库 基

3、本库 基本库是OpenGL的核心函数库。所有OpenGL操作都可用这些函数来实现。可以在平台之间移植。这些函数以“gl”为前缀。 实用库 实用库建立在基本库的基础之上,目的是为了减轻使用者的编程负担。这些函数以“glu”为前缀。 辅助库 提供窗口管理函数、事件处理函数和简单模型制作函数。这些函数以“aux”为前缀。,8,二、用VC+编写OpenGL程序,2、帧缓存 在OpenGL中,帧缓存由颜色缓存、深度缓存、模板缓存和累积缓存组成。 颜色缓存:用于存储每个像素点的颜色,包括左前、(左后、右前、右后)和辅助颜色缓存。 深度缓存:用于存储每个像素点的深度值。 模板缓存:用于将作图限制在屏幕中的某

4、些部分。 累积缓存:在RGBA模式中,用于将一系列图像累加成一幅图像。 3、建立OpenGL控制台应用程序(.NET),(4)OpenGL实用程序工具包(OpenGL utility toolkit,GLUT):glut Windows专用函数 API,9,2021/2/26,10,4、OpenGL中的数据类型,2021/2/26,11,5、函数命名约定 OpenGL函数都遵循一个命名约定,即采用以下格式: 例如函数glColor3f(),gl表示这个函数来自库gl.h,color表示该函数用于颜色设定,3f表示这个函数采用了三个浮点数参数。,2021/2/26,12,6、OpenGL中的颜色

5、 在OpenGL中,一种颜色用红、绿、蓝成分的混合来表示,每种成分的值范围是0.0到1.0 。,OpenGL初步编程,在Windows下开发和创建一个OpenGL程序的基本步骤: 第一步,选择一个编译环境,如VC+ 第二步,安装GLUT工具包 第三步,建立一个OpenGL工程 第四步,编译连接 第五步,执行程序,OpenGL初步编程,OpenGL库和头文件: 动态库:opengl32.dll glu32.dll glut32.dll 放入windowssystem32目录下 静态库:opengl32.lib glu32.lib glut32.lib放入VC安装目录的LIB目录下 头文件:gl.

6、h glu.h glut.h放入VC安装目录的IncludeGL文件夹下,程序结构,绝大多数OpenGL程序具有类似的结构,包含下 述函数 main(): 定义回调函数 打开一个或多个具有指定属性的窗口 进入事件循环(最后一条可执行语句) init(): 设置状态变量 视图 属性 回调 显示函数 输入和窗口函数,#include / glut.h includes gl.h and glu.h void display() . . . void init() . . . int main( int argc, char *argv) . . . ,void display() glClear(

7、 GL_COLOR_BUFFER_BIT); / Clear the frame buffer glColor3f( 0.0, 1.0, 0.0); / Set current color to green glBegin( GL_POLYGON); / Draw the triangle glVertex2f( -0.7, -0.7); glVertex2f( 0.7, -0.7); glVertex2f( 0, 0.7); glEnd(); glFlush(); / Force to display the new drawings immediately ,void init() glC

8、learColor( 0.0, 0.0, 0.0, 0.0); / Set the clear color to black / Specify the boundaries of the viewing window glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-1.0, 1.0, -1.0, 1.0); / The para are: (left, right, bottom, top) glMatrixMode(GL_MODELVIEW); ,int main( int argc, char *argv) glutI

9、nit( / Indicate normal termination / (Required by ANSI C) ,Main.c,#include main(int argc 这自动包含了gl.h int argc, char* argv) glutInit( 设置OpenGL状态 进入事件循环,21,三、图形变换,1、投影 void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); 函数功能:用一个正射投影矩阵右乘当前投影矩阵。 输入参数

10、:裁剪面left,right,bottom,top,zNear,zFar。 输出参数:无 返回值:无 void glOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top);,22,三、图形变换,正射投影,23,三、图形变换,正射投影矩阵,24,三、图形变换,void gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar); 函数功能:设置一个透视投影矩阵。 输入参数:视域的角度fovy,视域宽与高的比率,视点到近

11、和远裁剪面的距离zNear和zFar。 输出参数:无 返回值:无,25,三、图形变换,void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); 函数功能:用一个透视投影矩阵右乘当前投影矩阵。 输入参数:裁剪面left,right,bottom,top,到近和远裁剪面的距离zNear和zFar。 输出参数:无 返回值:无,26,三、图形变换,透视投影(glFrustum),near,far,left,right,bottom,top,vi

12、ew point,27,三、图形变换,透视投影(glFrustum)矩阵,28,三、图形变换,2、视区变换 void glViewport(GLint x, GLint y, GLint width, GLint height); 函数功能:在窗口中定义一个视区。 输入参数:视区左下角坐标(x,y),视区的宽width,视区的高height。 输出参数:无 返回值:无,29,三、图形变换,3、裁剪变换 void glClipPlane(GLenum plane,const GLdouble *equation); 函数功能:定义附加裁剪平面。 输入参数: 参数plane表示裁剪平面索引号GL_

13、CLIP_PLANEi (i取0到到GL_MAX_CLIP_PLANES-1 之间的整数), 参数equation表示三维平面方程Ax+By+Cz+D=0的系数A,B,C和D构成的数组。 输出参数:无 返回值:无,30,三、图形变换,4、几何变换 void glRotatef,d(TYPE angle, TYPE x, TYPE y, TYPE z); 函数功能:对局部坐标系进行旋转。 输入参数:旋转角度angle,旋转轴方向矢量(x,y,z)。 输出参数:无 返回值:无,31,三、图形变换,void glTranslatef,d(TYPE x, TYPE y, TYPE z); 函数功能:对

14、局部坐标系进行平移。 输入参数:在坐标轴方向的平移量x,y和z。 输出参数:无 返回值:无 void glScalef,d(TYPE x, TYPE y, TYPE z); 函数功能:对局部坐标系进行缩放。 输入参数:在坐标轴方向的缩放量x,y和z。 输出参数:无 返回值:无,32,四、图元绘制,1、图元定义 void glBegin(GLenun mode); 函数功能:定义图元,图元顶点序列开始。 输入:图元类型 输出:无 返回值:无 void glEnd(void); 函数功能:定义图元,图元顶点序列结束。 输入:无 输出:无 返回值:无,33,四、图元绘制,2、画点 void glPo

15、intSize(GLfloat size); 函数功能:定义顶点大小。 输入:顶点大小size,size必须大于0.0,缺省为1.0。 输出:无 返回值:无 void glVertex2,3,4sifdv(TYPE coords); 函数功能:定义顶点。 输入:顶点坐标。 输出:无 返回值:无,34,四、图元绘制,3、画线 void glLineWidth(GLfloat width); 函数功能:定义线宽。 输入:线宽width,该值必须大于0.0,缺省为1.0。 输出:无 返回值:无 void glLineStipple(GLint factor,GLushort pattern); 函数

16、功能:定义线模式。 输入:factor表示重复次数(1到255), pattern表示线模式。 输出:无 返回值:无,35,四、图元绘制,4、画多边形 void glPolygonMode(GLenum face,GLenum mode); 函数功能:定义多边形模式。 输入:face表示绘制多边形的哪些面(GL_FRONT,GL_BACK,GL_FRONT_AND_BACK),mode表示面模式(GL_POINT, GL_LINE, GL_FILL)。 输出:无 返回值:无 void glPolygonFace(GLenum mode); 函数功能:定义多边形的正面。 输入:mode表示多边形

17、的哪个面为正面(GL_CCW, GL_CW)。 输出:无 返回值:无,36,四、图元绘制,void glCullFace(GLenum mode); 函数功能:剔除多边形的某些面。 输入:mode表示被剔除的面(GL_FRONT,GL_BACK,GL_FRONT_AND_BACK 。 输出:无 返回值:无 void glPolygonStipple(const GLubyte *mask); 函数功能:定义填充模式。 输入:mask指向一个32x32位图。 输出:无 返回值:无,37,四、图元绘制,5、实例 图元绘制实例:见pointp.c,lines.c和polys.c glBegin(GL

18、enun mode); mode可能的取值有: GL_POINTS; GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP; GL_TRIANGLES, GL_TRIANGLE_STRIP; GL_QUADS, GL_QUAD_STRIP; GL_POLYGON. 在二维投影下,glRectf可以绘制矩形,38,五、颜色和光照,1、绘图颜色 void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); 函数功能:设定清颜色缓冲区颜色值。 void glClear(GLbitf

19、ield mask); 函数功能:清除指定的缓冲区。,39,五、颜色和光照,void glColor3b,f,d,s,i,ub,ui,us(TYPE red, TYPE green, TYPE blue); void glColor4b,f,d,s,i,ub,ui,us(TYPE red, TYPE green, TYPE blue, TYPE alpha); void glColor3b,f,d,s,i,ub,ui,usv(TYPE *v); void glColor4b,f,d,s,i,ub,ui,usv(TYPE *v); 函数功能:指定当前颜色。 void glIndexs,i,f,d

20、(TYPE c); void glIndexs,i,f,dv(TYPE *c); 函数功能:设置当前颜色索引值。,40,五、颜色和光照,2、阴影模式 void glShadeMode(GLenum mode); 函数功能:设置阴影模式。 输入参数:阴影模式类型mode。mode取值为GL_FLAT或GL_SMOOTH。当阴影模式为GL_FLAT时,多边形用一个顶点的颜色进行绘制;当阴影模式为GL_SMOOTH时,多边形用各个顶点颜色的插值结果进行绘制。 输出参数:无 返回值:无,41,五、颜色和光照,3、材质 void glMateriali,f(GLenum face,Glenum pNam

21、e, TYPE param); void glMateriali,fv(GLenum face,Glenum pName, TYPE *param); 函数功能:定义当前多边形的材质。 输入参数:参数face表示材质应用于多边形的哪个面(GL_FRONT、GL_BACK或GL_FRONT_AND_BACK),参数pName表示光线类型(GL_AMBIENT、GL_DIFFUSE、GL_SPECULAR、GL_SHINESS或GL_EMISSION)。参数param表示反射率或镜面反射指数。GL_SHINESS表示镜面反射指数,此时param允许取值范围为0到128。 输出参数:无 返回值:无,

22、42,五、颜色和光照,void glColorMaterial(GLenum face, GLenum mode); 函数功能:定义当前多边形的材质。 输入参数:参数face表示材质应用于多边形的哪个面(GL_FRONT、GL_BACK或GL_FRONT_AND_BACK),参数pName表示光线类型(GL_AMBIENT、GL_DIFFUSE、GL_AMBIENT_AND_DIFFUSE、GL_SPECULAR、GL_SHINESS或GL_EMISSION) 。参数face缺省为GL_FRONT_AND_BACK,参数pName缺省为GL_AMBIENT_AND_DIFFUSE。 输出参数:

23、无 返回值:无 void glColor*();,43,五、颜色和光照,4、光照 void glLight i,f(GLenum light,Glenum pName, TYPE param); void glLighti,fv(GLenum light,Glenum pName, TYPE *param); 函数功能:创建光源。 输入参数:参数light表示光源编号GL_LIGHTi(i取0到GL_MAX_LIGHTS-1之间的值),参数pName表示操作类型(GL_AMBIENT、GL_DIFFUSE、GL_SPECULAR、GL_POSITION、GL_SPOT_DIRECTION、GL

24、_SPOT_EXPONEXT、GL_SPOT_CUTOFF或GL_CONST_ATTENUATION)。参数param表示光的强度、 光源位置、衰减因子或其他。 输出参数:无 返回值:无,44,五、颜色和光照,5、光照模型 void glLightModeli,f(GLenum pName,TYPE param); void glLightModeli,fv(GLenum pName,TYPE *param); 函数功能:建立光照模型。 输入参数:参数pName表示光照模型的类型(GL_LIGHG_MODEL_AMBIENT、GL_LIGHT_MODEL_LOCAL_VIEWER或GL_MOD

25、EL_TWO_SIDE)。参数param表示要设置的参数值。参数pName取GL_LIGHG_MODEL_AMBIENT时,param表示全局环境光,参数pName取GL_LIGHG_MODEL_LOCAL_VIEWER时,param表示镜面反射光视角的计算方法。 输出参数:无 返回值:无,45,五、颜色和光照,6、实例 见matarial.c,colormat.c,46,五、颜色和光照,47,五、颜色和光照,void glNormal3b,s,i,f,d(TYPE nx, TYPE ny, TYPE nz); void glNormal3 b,s,i,f,d v(const TYPE *v)

26、; 函数功能:设置当前法向量。 输入参数:法向量分量或法向量矢量。法向量的方向影响镜面反射光和散射光的强度。 输出参数:无 返回值:无,48,六、混合、反走样和雾,1、混合 void glBlendFunc(GLenum sfactor, GLenum dfactor); 函数功能:设置混合因子。 输入参数:参数sfactor和dfactor分别表示混合源因子和混合目标因子。 输出参数:无 返回值:无 结果颜色值 RsSr+RdDr,GsSg+GdDg,BsSb+BdDb,AsSa+AdDa其中Rs,Rd等表示源和目标颜色,Sr,Dr等表示混合因子。各分量的值被截取到0,1.,49,六、混合、

27、反走样和雾,50,六、混合、反走样和雾,51,六、混合、反走样和雾,52,六、混合、反走样和雾,53,六、混合、反走样和雾,2、反走样 void glHint(GLenum target, GLenum mode); 函数功能:设置实现线索。 输入参数:参数target表示行为(GL_POINT_SMOOTH_HINT、 GL_LINE_SMOOTH_HINT、 GL_FOG_HINT、 GL_POLYGON_SMOOTH_HINT),参数mode表示计算时的首选考虑(GL_FASTEST、GL_NICEST或GL_DONT_CARE)。 输出参数:无 返回值:无,54,六、混合、反走样和雾,

28、3、雾化 void glFogi,f(GLenum pName, TYPE param); void glFogi,fv(GLenum pName, TYPE *param); 函数功能:设置混合因子。 输入参数:参数pName表示将要设置的参数类型(GL_FOG_MODE、 GL_FOG_ DENSITY、GL_FOG_START、 GL_FOG_END、 GL_FOG_ COLOR、GL_FOG_INDEX),参数param表示参数值。当pName为GL_FOG_MODE时,param取值为GL_LINEAR、GL_EXP或GL_EXP2。 输出参数:无 返回值:无,55,六、混合、反走样

29、和雾,56,六、混合、反走样和雾,例:见alpha.c,aargb.c和fog.c,57,七、显示列表、位图和图像,1、显示列表 显示列表为优化绘图性能而设计,尤其是为优化网络应用而设计。OpenGL的显示列表在程序运行过程中是不可修改的。 显示列表的典型 应用 位图和图像:将位图或图像的定义添加到显示列表中,在显示列表编译 (而不是在图形显示)时将数据转换成硬件支持的格式。 光照、材质及光照模型:可将材质定义添加到显示列表中,避免在材质选择时反复计算。 纹理:将纹理定义添加到显示列表中,在显示列表编译 (而不是在图形显示)时将纹理格式转换成硬件支持的格式。 矩阵操作:将计算某些矩阵及其逆矩阵

30、的OpenGL命令添加到显示列表。,58,七、显示列表、位图和图像,void glNewList(GLuint list, GLenum mode); 函数功能:新建一个显示列表。 输入参数:参数list表示显示列表的名称,参数mode表示显示列表的状态(GL_COMPILE、 GL_COMPILE_AND_EXECUTE)。 输出参数:无 返回值:无 void glEndList(); 函数功能:显示列表定义结束。 void glCallList(GLuint list); 函数功能:调用显示列表。,59,七、显示列表、位图和图像,GLuint glGenLists(GLsizei rang

31、e); 函数功能:新建一组空显示列表。 输入参数:参数range表示将要创建的显示列表的数目。 输出参数:无 返回值:成功时返回最前面一个显示列表的索引值,否则返回0。 GLboolean glIsList(GLuint list); 函数功能:测试显示列表是否存在。 输入参数:参数list表示被测试显示列表的名称。 输出参数:无 返回值:被测试的显示列表存在时返回GL_TRUE,否则返回GL_FALSE。,60,七、显示列表、位图和图像,例:见list.c,61,七、显示列表、位图和图像,2、位图 OpenGL提供了位图操作函数。利用这些函数可以实现字符(串)输出。 void glRaste

32、rPos2 d,f,i,s(TYPE x, TYPE y); void glRasterPos3 d,f,i,s(TYPE x, TYPE y, TYPE z); void glRasterPos4 d,f,i,s(TYPE x, TYPE y, TYPE z, TYPE w); void glRasterPos2,3,4d,f,i,sv(TYPE *v); 函数功能:指定像素操作的光栅位置。,62,七、显示列表、位图和图像,void glBitmap(GLsizei width, GLsizei height, GLfloat x, GLfloat y, GLfloat dx, GLfloa

33、t dy,const GLubyte *bitmap); 函数功能:绘制位图。 输入参数:参数width,height表示位图按像素表示的宽和高,参数x,y表示位图的左下角(相对于当前光栅位置的)坐标,参数dx,dy表示当前位图画完之后,当前光栅位置在水平和垂直方向的偏移量,参数bitmap表示位图的地址。 输出参数:无 返回值:无。,63,七、显示列表、位图和图像,glPixelStorei,f(GLenum pName,TYPE param); 函数功能:设置像素存储模式。 输入参数:参数pName表示存储模式名,参数param为特定存储模式设定的值。 输出参数:无 返回值:无。,64,七

34、、显示列表、位图和图像,65,七、显示列表、位图和图像,66,七、显示列表、位图和图像,例:见font.c,67,七、显示列表、位图和图像,3、图像 在位图中,每个像素点用一位来存储它的信息;在图像中,一个像素点可以用多位来存储它的信息。 图像可以用作纹理图。,68,七、显示列表、位图和图像,void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels); 函数功能:从帧缓存中读取像素块。 输入参数:参数x,y表示像素块左下角的坐标,参数

35、width,height表示像块的宽和高,参数format表示像素数据的格式(GL_RGB、GL_RGBA、GL_RED、GL_GREEN、GL_BLUE、GL_ALPHA、 GL_LUMINANCE_ALPHA、 GL_LUMINANCE、GL_DEPTH_COMPONENT、GL_STENCIL_INDEX、GL_COLOR_INDEX),参数type表示像素数据的数据类型(GL_UNSIGNED_BYTE、GL_BYTE、GL_BITMAP、GL_UNSIGNED_SHORT、GL_SHORT、GL_UNSIGNED_INT、GL_INT、GL_FLOAT),参数pixels指向像素数据

36、。 输出参数:无 返回值:无。,69,七、显示列表、位图和图像,void glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels); 函数功能:在当前光栅位置绘制像素块。 输入参数:参数width,height表示像块的宽和高,参数format表示像素数据的格式(GL_RGB、GL_RGBA、GL_RED、GL_GREEN、GL_BLUE、GL_ALPHA、 GL_LUMINANCE_ALPHA、 GL_LUMINANCE、GL_DEPTH_COMPONENT、GL_STENC

37、IL_INDEX、GL_COLOR_INDEX),参数type表示像素数据的数据类型(GL_UNSIGNED_BYTE、GL_BYTE、BL_BITMAP、GL_UNSIGNED_SHORT、GL_SHORT、GL_UNSIGNED_INT、GL_INT、GL_FLOAT),参数pixels指向像素数据。 输出参数:无 返回值:无。,70,七、显示列表、位图和图像,void glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type); 函数功能:从帧缓存拷贝像素块到当前光栅位置。 输入参数:参数x,y表示

38、像素块左下角的窗口坐标,参数width,height表示像块的宽和高,参数type表示拷贝操作的类型(GL_COLOR、GL_STENCIL、GL_DEPTH) 。 输出参数:无 返回值:无。,71,七、显示列表、位图和图像,void glPixelZoom(GLfloat xfactor, GLfloat yfactor); 函数功能:在x 和y方向进行缩放。 void glPixelTransferi,f(GLenum pName,TYPE param); 函数功能:设置像素转换模式。 输入参数:参数pName表示像素转换模式名,参数param表示pName要设定的值 。 输出参数:无 返

39、回值:无。,72,七、显示列表、位图和图像,73,七、显示列表、位图和图像,74,七、显示列表、位图和图像,75,七、显示列表、位图和图像,void glPixelMapui,us,fv(GLenum map,GLint mapsize,const TYPE *values); 函数功能:设置像素(转换)映射。 输入参数:参数map表示像素映射表名称,参数mapsize表示映射表的大小,参数values表示mapsize个值对组成的数组。 输出参数:无 返回值:无,76,七、显示列表、位图和图像,77,七、显示列表、位图和图像,78,七、显示列表、位图和图像,例:见image.c,79,七、显

40、示列表、位图和图像,80,七、显示列表、位图和图像,81,七、显示列表、位图和图像,82,七、显示列表、位图和图像,83,七、显示列表、位图和图像,84,七、显示列表、位图和图像,85,八、纹理映射,1、生成和绑定纹理名称 void glGenTextures(GLsizei n,GLuint *textures); 函数功能:生成纹理名称。 输入参数:参数n为纹理名称的数目,参数textures表示被生成的纹理名称构成的数组。 输出参数:无 返回值:无。,86,八、纹理映射,87,八、纹理映射,2、纹理定义 物体表面细节分为两类:一类是表面的颜色纹理,如桌上的木纹;另一类是表面的几何纹理,如

41、凹凸不平的树皮。 简单规则的颜色纹理可用表面细节多边形来模拟;当纹理变得精致复杂时,可采用纹理映射(texture map)技术,即将一幅平面图映射到物体表面上,从而产生物体表面的细节。 纹理是一块矩形区域,可以从图像中读取。可以将纹理映射到非矩形区域。,88,八、纹理映射,纹理映射的基本步骤: 纹理定义 控制颜色 启用纹理映射 指定纹理坐标和几何坐标,89,八、纹理映射,void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width, GLsizei height,GLint border, GLe

42、num format, GLenum type,const GLvoid *pixels); 函数功能:定义一个二维纹理图像。 输入参数:参数target为纹理类型,只能是GL_TEXTURE_2D,参数level表示多分率图像的级数,参数internalFormat表示纹理中颜色分量的数目,参数width和height表示图像的宽和高,参数border表示图像边界的大小,参数format表示像素数据的格式,参数type表示像素数据的类型,参数pixels是指向像素数据的指针。 输出参数:无 返回值:无。,90,八、纹理映射,void glTexImage1D(GLenum target,GL

43、int level,GLint internalFormat,GLsizei width, GLsizei height,GLint border, GLenum format, GLenum type,const GLvoid *pixels); 函数功能:定义一个二维纹理图像。 输入参数:参数target为纹理类型,只能是GL_TEXTURE_1D,参数level表示多分率图像的级数,参数internalFormat表示纹理中颜色分量的数目(1,2,3或4),参数width和height表示图像的宽和高,参数border表示图像边界的大小,参数format表示像素数据的格式,参数type表

44、示像素数据的类型,参数pixels是指向像素数据的指针。 输出参数:无 返回值:无。,91,八、纹理映射,92,八、纹理映射,MIP纹理映射 程序员可以指定一系列分辩率递减的纹理图(mipmaps),OpenGL按照物体的尺寸自动确定应该使用哪个纹理图。 使用MIP纹理映射技术时,纹理图的大小必须从n*n依次递减到1*1。,93,八、纹理映射,3、设置纹理参数 void glTexParameteri,f(GLenum target, GLenum pName,TYPE param); void glTexParameteri,fv(GLenum target, GLenum pName,TY

45、PE *param); 函数功能:设置纹理参数。 输入参数:参数target为纹理类型(GL_TEXTURE_1D, GL_TEXTURE_2D) ,参数pName表示纹理名称(GL_TEXTURE_BORDER_COLOR 、GL_TEXTURE_WRAP_S 、GL_TEXTURE_WRAP_T 、 GL_TEXTURE_MIN_FILTER 、 GL_TEXTURE_MAG_FILTER),参数param表示pName的值。 输出参数:无 返回值:无。,94,八、纹理映射,95,八、纹理映射,96,八、纹理映射,4、纹理映射 void glTexCoord1,2,3,4d,f,i,s(T

46、YPE s, TYPE t, TYPE r, TYPE q); void glTexCoord1,2,3,4d,f,i,sv(const TYPE *v); 函数功能:设置纹理坐标。 输入参数:参数s,t,r,q为纹理坐标。 输出参数:无 返回值:无。,97,八、纹理映射,98,八、纹理映射,void glTexEnvi,f(GLenum target, GLenum pName,TYPE param); void glTexEnvi,fv(GLenum target, GLenum pName,TYPE *param); 函数功能:设置纹理环境参数。 输入参数:参数target表示纹理环境(

47、GL_TEXTURE_ENV),参数pName纹理环境参数名,参数param表示pName的值。 输出参数:无 返回值:无。,99,八、纹理映射,100,八、纹理映射,101,八、纹理映射,102,八、纹理映射,void glTexGeni,f,d(GLenum coord, GLenum pName,TYPE param); void glTexGeni,f,dv(GLenum coord, GLenum pName,TYPE *param); 函数功能:自动生成纹理坐标。 输入参数:参数coord表示纹理坐标(GL_S、GL_T、GL_R、GL_Q),参数pName表示纹理坐标生成函数名或

48、函数参数,参数param表示pName的值。 输出参数:无 返回值:无。,103,八、纹理映射,104,八、纹理映射,105,八、纹理映射,106,八、纹理映射,例:见texbind.c , texgen.c,107,九、复杂图形绘制,1、Bezier曲线,108,九、复杂图形绘制,109,九、复杂图形绘制,110,九、复杂图形绘制,111,九、复杂图形绘制,112,九、复杂图形绘制,113,九、复杂图形绘制,114,九、复杂图形绘制,115,九、复杂图形绘制,116,九、复杂图形绘制,2、三次样条曲线,117,九、复杂图形绘制,118,九、复杂图形绘制,119,九、复杂图形绘制,3、B样条曲线,120,九、复杂图形绘制,121,九、复杂图形绘制,4、Bezier曲面,122,九、复杂图形绘制,个人观点供参考,欢迎讨论,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1