OpenGL高级课题与纹理映射技术教程课件

上传人:m**** 文档编号:591399521 上传时间:2024-09-17 格式:PPT 页数:62 大小:3.19MB
返回 下载 相关 举报
OpenGL高级课题与纹理映射技术教程课件_第1页
第1页 / 共62页
OpenGL高级课题与纹理映射技术教程课件_第2页
第2页 / 共62页
OpenGL高级课题与纹理映射技术教程课件_第3页
第3页 / 共62页
OpenGL高级课题与纹理映射技术教程课件_第4页
第4页 / 共62页
OpenGL高级课题与纹理映射技术教程课件_第5页
第5页 / 共62页
点击查看更多>>
资源描述

《OpenGL高级课题与纹理映射技术教程课件》由会员分享,可在线阅读,更多相关《OpenGL高级课题与纹理映射技术教程课件(62页珍藏版)》请在金锄头文库上搜索。

1、OpenGL高级课题与纹理映射技术高级课题与纹理映射技术OpenGL 架构显示列表显示列表求值器求值器顶点操作顶点操作光栅化光栅化逐个象素操作逐个象素操作帧缓冲帧缓冲纹理纹理CPU后象素处理后象素处理顶点变换与光照计算纹理映射帧缓冲区操作像素级光照计算OpenGL其他高级课题关于帧缓冲区(frame buffer)混合深度测试抖动逻辑操作裁剪测试模板测试Alpha测试象素帧缓冲区Alpha: 第四维颜色分量透明度的度量模拟透明物体玻璃、水等合成图像反走样混合状态下有效 glEnable( GL_BLEND );Alpha测试基于alpha值选择象素glAlphaFunc( func, valu

2、e )glEnable( GL_ALPHA_TEST );在纹理映射时用alpha值作为蒙板混合结合输出与帧缓冲器中原有的象素值glBlendFunc( src, dst )帧缓冲器帧缓冲器象素象素( (dstdst) )混合方程象素象素( (srcsrc) )混合后混合后的象素的象素裁剪包围盒其他的裁剪测试glScissor( x, y, w, h )包围盒外的象素被裁剪掉便于更新视域的一小块区域影响glClear()操作模板缓冲区(stencil buffer)用模板缓冲区的值控制绘制无法通过模板测试的象素将不被绘制例子:在模板缓冲区中创建一个蒙板,并仅绘制那些不在蒙板区域内的物体控制模板

3、缓冲区glStencilFunc( func, ref, mask )用func比较缓冲区的值与 ref只对那些mask值为1的象素进行操作func 是一个标准比较函数glStencilOp( fail(模板失败), zfail(模板通过,z失败), zpass(两者都通过) )基于模板测试和深度测试的结果相应调整模板缓冲区的值: GL_KEEP, GL_INCR创建模板glInitDisplayMode( |GLUT_STENCIL| );glEnable( GL_STENCIL_TEST );glClearStencil( 0x0 );glStencilFunc( GL_ALWAYS, 0

4、x1, 0x1 );glStencilOp( GL_REPLACE, GL_REPLACE, GL_REPLACE );绘制蒙板使用模板当stencil = 1绘制物体glStencilFunc( GL_EQUAL, 0x1, 0x1 )当stencil != 1绘制glStencilFunc( GL_NOTEQUAL, 0x1, 0x1 );glStencilOp( GL_KEEP, GL_KEEP, GL_KEEP ); 抖动glEnable( GL_DITHER );抖动用于加强视觉效果用于模拟更多颜色打印设置目前,该功能很少被用到象素上的逻辑操作使用位逻辑操作结合多个象素值glLogi

5、cOp( mode );命令模式GL_XORGL_AND目前,目前,该功能很少被用到功能很少被用到累积缓冲器颜色缓冲器合成的问题有限颜色分辨率截断精度损失累积缓冲区扮演着“浮点”颜色缓冲区的角色合成到积累缓冲区将结果转换到帧缓冲区累积缓冲区存取glAccum( op, value )操作在积累缓冲区中的操作: GL_ADD, GL_MULT读缓冲区操作: GL_ACCUM, GL_LOAD写缓冲区操作: GL_RETURNglAccum(GL_ACCUM, 0.5)将写缓冲区的每一个值乘以0.5,然后加到累积缓冲区中累积缓冲区的应用颜色合成:透明全屏反走样:A-buffer算法景深:Depth

6、 Cue滤波:运动模糊: Motion blur反走样(Anti-aliasing)消除锯齿状glEnable( mode )GL_POINT_SMOOTHGL_LINE_SMOOTHGL_POLYGON_SMOOTH象素的Alpha值由象素被覆盖大小决定可以是RGBA或颜色索引模式全屏反走样: 视点抖动当我们略微移动视点时,图像随之平移每一幅图像有不同的走样情况用积累缓冲区对图像作平均,将消除这些走样景深沿平行焦平面的方向移动视点前平面后平面焦平面眼睛位置1眼睛位置2景深景深雾化glFogif( property, value )景深效果处理指定线性雾化渐变区域大小GL_FOG_LINEAR

7、环境效果模拟真实雾化效果GL_FOG_EXPGL_FOG_EXP2雾化高级成像成像子集只有当GL_ARB_imaging有定义时才有效颜色矩阵卷积颜色表直方图MinMax高级混合立即模式、显示列表和保留模式立即模式(immediate mode)图元直接发送到绘制流水线并显示不需要显卡内存显示列表(display list)图元保存在显示列表中、显示列表保存在显卡中保留模式(retained mode)所有数据预先置入显存立即模式与显示列表立即模式列出显示显示显示列表列表多项式多项式求值器求值器顶点操作顶点操作和和图元组装图元组装光栅化光栅化象素象素操作操作纹理纹理内存内存CPU象素象素操作操

8、作帧帧缓冲缓冲显示列表创建显示列表GLuint id;void init( void ) id = glGenLists( 1 ); glNewList( id, GL_COMPILE ); /* other OpenGL routines */ glEndList();调用显示列表void display( void ) glCallList( id );显示列表不是所有的OpenGL程序都能存储在显示列表当中显示列表创建后,状态仍然能够被改变显示列表可以嵌套调用显示列表一旦创建,不能进行编辑令列表(A) 调用其他列表(B, C, 或D)删除A并按照要求调用B, C或D显示列表层次考虑一个汽

9、车模型创建底盘显示列表创建轮胎显示列表glNewList( CAR, GL_COMPILE );glCallList( CHASSIS );glTranslatef( );glCallList( WHEEL );glTranslatef( );glCallList( WHEEL );glEndList();保留模式将顶点、颜色数组一次性送至显存处理glVertexPointer( 3, GL_FLOAT, 0, coords )glColorPointer( 4, GL_FLOAT, 0, colors )glEnableClientState( GL_VERTEX_ARRAY )glEnab

10、leClientState( GL_COLOR_ARRAY )glDrawArrays( GL_TRIANGLE_STRIP, 0, numVerts );所有有效数组被用于绘制ColordataVertexdata保留模式的优点比直接绘制模式效率更高显示列表可以在多个OpenGL操作描述表之间共享,降低内存要求顶点数组便于内存访问的方式组织数据D3D和最近的OpenGL支持保留模式高级图元Bernstein 多项式求值器GLU NURBS(Non-Uniform Rational B-Splines,非均匀有理B样条)的基础GLU二次曲面物体球面圆柱(或圆锥)圆盘(或圆)反馈模式(很少用)未

11、绘制的光栅化后的顶点数据返回应用程序确定哪些图元最终被绘制到屏幕上需要指定反馈缓冲区glFeedbackBuffer( size, type, buffer )选择绘制反馈模式glRenderMode( GL_FEEDBACK );选择模式(很少用)决定哪些图元在视域当中需要一个缓冲区放置返回结果glSelectBuffer( size, buffer )选择绘制的选择模式glRenderMode( GL_SELECT )选择模式(续)用名字区别各个图元“名字”用整数而非字符串表示名字建立在堆上允许层次化图元名字选择程序glLoadName( name )glPushName( name )g

12、lInitNames()拾取拾取是选择的特殊情况编程步骤限制鼠标周围的一小块区域为当前绘制区域在投影矩阵上使用gluPickMatrix()进入选择模式; 重绘屏幕被视见体裁剪的每个图元引起一个选择命中退出选择模式; 分析命中记录纹理映射(texture mapping)纹理映射的基本原理凹凸纹理映射(bump mapping)位移映射(displacement mapping)环境纹理映射(environment mapping)基于光照映射的快速绘制(light mapping)高级纹理映射技术总结纹理映射将一个一维、二维、三维的图像映射到几何物体上的过程纹理映射的用途仿真自然界的材质减少

13、几何复杂度图像warping反射效果模拟。Texture Mappingstxyz图像:即纹理几何屏幕纹理映射与 图形绘制流程图像和几何在不同的管道中处理,最后在光栅处理器中融合。复杂的纹理不影响几何的复杂性。几何管道顶点象素管道图像光栅处理器纹理256 x 256的图像映射到一个长方形,并进行透视投影。纹理映射 I三步设置纹理读入或者生成图像将图像赋到某个纹理上打开纹理映射功能将纹理坐标赋到顶点上设置纹理参数Wrapping(重复pattern的方式), filtering(纹理采样的滤波方式):纹理对象类似于纹理图像序列的显示列表(可加快速度)每个纹理对象对应一个图像可以由多个图形上下文共

14、享生成纹理名字glGenTextures( n, *texIds );绑定纹理图像(id为纹理对象名字)glBindTexture( target, id );设置纹理图像从CPU内存的一块图像定义一个纹理对象glTexImage2D( target, level, components, w, h, border, format, type, *texels );图像的尺寸是 2的幂次纹理颜色由象素处理管道处理纹理图像的转换如果图像的维数不是2的幂次gluScaleImage( format, w_in, h_in, type_in, *data_in, w_out, h_out, type

15、_out, *data_out );*_in 源源图像像*_out 目目标图像像Format:图像格式(像格式(GL_RGB)Type:图像数据格式像数据格式在缩放过程中进行插值和滤波设定纹理的其他方法将帧缓冲器的内容设定为纹理图像的来源 glCopyTexImage1D(.)glCopyTexImage1D(.) glCopyTexImage2D(.)glCopyTexImage2D(.)设置某个纹理的一部分glTexSubImage1D(.)glTexSubImage1D(.)glTexSubImage2D(.)glTexSubImage2D(.)glTexSubImage3D(.)glT

16、exSubImage3D(.)拷贝部分纹理 glCopyTexSubImage2D(.)纹理映射基于参数化的纹理坐标glTexCoord*() 指定每个顶点处的纹理st1, 10, 10, 01, 0(s, t) = (0.2, 0.8)(0.4, 0.2)(0.8, 0.4)ABCabc纹理空间物体空间生成纹理坐标纹理映射区域通常是平面或曲面,计算任意空间曲面与纹理域的对应关系本质上是一个参数化的过程避免出现扭曲、变形的效果最好是保角映射或保面积映射平面方程数学曲面物体表面属性过程式纹理函数生成OpenGL中生成纹理坐标自动生成纹理坐标glTexGenifdv()指定一个平面基于到平面的距离

17、生成纹理坐标生成模式GL_OBJECT_LINEARGL_EYE_LINEAR GL_SPHERE_MAP过程式纹理坐标生成纹理映射演示纹理映射参数纹理滤波模式缩小或放大时的滤波方式mipmap 缩小滤波纹理取址方式Clamping(边界颜色) repeating(重复)纹理融合函数如何混合纹理的颜色与物体表面计算的颜色:融合,modulate 或者替换滤波模式纹理多边形放大时缩小多边形纹理例如:glTexParameteri( target, type, mode );glTexParameteri( target, type, mode );Mipmapped 纹理Mipmap 允许对一个

18、纹理进行预处理,生成小尺寸纹理对于小的物体,能减少插值错误,加快绘制速度Mipmap由OpenGL自动生成可以在定义纹理的时候声明mipmap层次glTexImage*D( GL_TEXTURE_*D, level, )glTexImage*D( GL_TEXTURE_*D, level, )GLU mipmap 生成函数gluBuild*DMipmaps( )gluBuild*DMipmaps( )OpenGL 1.2 引入了高级的 LOD(层次细节) 控制点采样、双向滤波、三线性滤波、各向异性滤波点采样、双向滤波、三线性滤波、各向异性滤波纹理插值模式纹理取址方式函数使用例子:glTexPa

19、rameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP )glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ) (上左)重复;(上右)镜像;(下左)截断;(下右)重复边界颜色 纹理融合函数控制纹理是如何映射到物体上glTexEnvfiv( GL_TEXTURE_ENV, prop, param ) GL_TEXTURE_ENV_MODE 模式:GL_MODULATEGL_BLENDGL_DECAL(GL_REPLACE)设置混合颜色: GL_TEXTURE_ENV_COLO

20、RDemo: MFCTex多步纹理映射multipass texture mapping对同一个物体实施多步光照明计算和多个纹理映射,这就是三维绘制引擎中的多步纹理技术(multipass texture mapping)两步绘制:计算漫射分量并与纹理相乘计算镜面分量并与第一步计算结果相加。在每一步中,纹理值可以和其他光照明分量进行多种融合操作,包括替代、相加、混合等。alpha通道扮演了一个远远超过透明度的角色。Quake3引擎中的多步纹理映射第1到第4步:累积凹凸映射;第5步:漫射光分量;第6步:基纹理;第7步:镜面光分量(可选);第8步:自身发射光分量(可选);第9步:体/雾/大气效果(

21、可选);第10步:屏幕闪烁(可选)。单步多纹理映射技术在单个绘制步骤中应用两个或多个纹理:单步多纹理映射技术(multi-texture mapping)。定义由一系列纹理步骤组成的纹理融合嵌套流水线。通常,第一个纹理步骤融合两个纹理值(或者插值后的顶点值)的RGB和alpha分量。其结果送入第二个步骤与其他的纹理值(或者插值后的顶点值)进行处理,直到完成所有的纹理步骤,最后与保存在帧缓冲器中的值进行融合或替代操作。可编程图形硬件可以处理8个纹理的同时融合Half life中的辐射法向纹理映射多步纹理映射:单步多纹理映射步 数速 度显 卡 支 持优 点缺 点多步纹理映射多步慢全部步骤无限制完成功能有限单步多纹理映射 单步快部分可完成多种功能单步内纹理映射数有限

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号