OGRE(O-OGraphicsRenderingEngine)_第1页
OGRE(O-OGraphicsRenderingEngine)_第2页
OGRE(O-OGraphicsRenderingEngine)_第3页
OGRE(O-OGraphicsRenderingEngine)_第4页
OGRE(O-OGraphicsRenderingEngine)_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、耿卫东 陈为OpenGL高级课题 显示列表和顶点数组 Alpha混合和反走样 雾化 反馈和选择 象素测试与操作 累积和模板缓冲器纹理映射OGRE中的纹理映射显示列表显示列表求值器求值器顶点操作顶点操作光栅化光栅化逐个象素操作逐个象素操作帧缓冲帧缓冲纹理纹理CPU后象素处理后象素处理顶点变换与光照计算纹理映射帧缓冲区操作像素级光照计算OpenGL其他高级课题混合深度测试抖动逻辑操作裁剪测试模板测试Alpha测试象素帧缓冲区透明度的度量 模拟透明物体 玻璃、水等 合成图像 反走样 混合状态下有效 glEnable( GL_BLEND );基于alpha值选择象素 glAlphaFunc( func

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

3、1的象素进行操作 func 是一个标准比较函数glStencilOp( fail(模板失败), zfail(模板通过,z失败), zpass(两者都通过) ) 基于模板测试和深度测试的结果相应调整模板缓冲区的值: GL_KEEP, GL_INCRglInitDisplayMode( |GLUT_STENCIL| );glEnable( GL_STENCIL_TEST );glClearStencil( 0 x0 );glStencilFunc( GL_ALWAYS, 0 x1, 0 x1 );glStencilOp( GL_REPLACE, GL_REPLACE, GL_REPLACE );绘

4、制蒙板当stencil = 1绘制物体glStencilFunc( GL_EQUAL, 0 x1, 0 x1 )当stencil != 1绘制 glStencilFunc( GL_NOTEQUAL, 0 x1, 0 x1 ); glStencilOp( GL_KEEP, GL_KEEP, GL_KEEP ); glEnable( GL_DITHER );抖动用于加强视觉效果 用于模拟更多颜色打印设置目前,该功能很少被用到使用位逻辑操作结合多个象素值 glLogicOp( mode );命令模式 GL_XOR GL_AND目前,该功能很少被用到目前,该功能很少被用到颜色缓冲器合成的问题 有限颜色

5、分辨率 截断 精度损失 累积缓冲区扮演着“浮点”颜色缓冲区的角色 合成到积累缓冲区 将结果转换到帧缓冲区glAccum( op, value ) 操作 在积累缓冲区中的操作: GL_ADD, GL_MULT 读缓冲区操作: GL_ACCUM, GL_LOAD 写缓冲区操作: GL_RETURN glAccum(GL_ACCUM, 0.5)将写缓冲区的每一个值乘以0.5,然后加到累积缓冲区中颜色合成:透明全屏反走样:A-buffer算法景深:Depth Cue滤波:运动模糊: Motion blur消除锯齿状glEnable( mode ) GL_POINT_SMOOTH GL_LINE_SMO

6、OTH GL_POLYGON_SMOOTH 象素的Alpha值由象素被覆盖大小决定 可以是RGBA或颜色索引模式当我们略微移动视点时,图像随之平移 每一幅图像有不同的走样情况 用积累缓冲区对图像作平均,将消除这些走样沿平行焦平面的方向移动视点前平面后平面焦平面眼睛位置1眼睛位置2景深景深glFogif( property, value )景深效果处理 指定线性雾化渐变区域大小 GL_FOG_LINEAR环境效果 模拟真实雾化效果 GL_FOG_EXP GL_FOG_EXP2成像子集 只有当GL_ARB_imaging有定义时才有效 颜色矩阵 卷积 颜色表 直方图 MinMax 高级混合立即模式

7、(immediate mode) 图元直接发送到绘制流水线并显示 不需要显卡内存显示列表(display list) 图元保存在显示列表中、显示列表保存在显卡中保留模式(retained mode) 所有数据预先置入显存立即模式列出显示显示显示列表列表多项式多项式求值器求值器顶点操作顶点操作和和图元组装图元组装光栅化光栅化象素象素操作操作纹理纹理内存内存CPU象素象素操作操作帧帧缓冲缓冲创建显示列表GLuint id;void init( void ) id = glGenLists( 1 ); glNewList( id, GL_COMPILE ); /* other OpenGL rout

8、ines */ glEndList();调用显示列表void display( void ) glCallList( id );不是所有的OpenGL程序都能存储在显示列表当中显示列表创建后,状态仍然能够被改变显示列表可以嵌套调用显示列表一旦创建,不能进行编辑 令列表(A) 调用其他列表(B, C, 或D) 删除A并按照要求调用B, C或D考虑一个汽车模型 创建底盘显示列表 创建轮胎显示列表glNewList( CAR, GL_COMPILE );glCallList( CHASSIS );glTranslatef( );glCallList( WHEEL );glTranslatef( );

9、glCallList( WHEEL );glEndList();将顶点、颜色数组一次性送至显存处理glVertexPointer( 3, GL_FLOAT, 0, coords )glColorPointer( 4, GL_FLOAT, 0, colors )glEnableClientState( GL_VERTEX_ARRAY )glEnableClientState( GL_COLOR_ARRAY )glDrawArrays( GL_TRIANGLE_STRIP, 0, numVerts );所有有效数组被用于绘制ColordataVertexdata比直接绘制模式效率更高显示列表可以在

10、多个OpenGL操作描述表之间共享,降低内存要求顶点数组便于内存访问的方式组织数据D3D和最近的OpenGL支持保留模式Bernstein 多项式求值器 GLU NURBS(Non-Uniform Rational B-Splines,非均匀有理B样条)的基础GLU二次曲面物体 球面 圆柱(或圆锥) 圆盘(或圆)未绘制的光栅化后的顶点数据返回应用程序 确定哪些图元最终被绘制到屏幕上需要指定反馈缓冲区glFeedbackBuffer( size, type, buffer )选择绘制反馈模式 glRenderMode( GL_FEEDBACK );决定哪些图元在视域当中需要一个缓冲区放置返回结果

11、选择绘制的选择模式 glRenderMode( GL_SELECT )用名字区别各个图元 “名字”用整数而非字符串表示名字建立在堆上 允许层次化图元名字选择程序 glLoadName( name ) glPushName( name ) glInitNames()拾取是选择的特殊情况编程步骤 限制鼠标周围的一小块区域为当前绘制区域在投影矩阵上使用gluPickMatrix() 进入选择模式; 重绘屏幕 被视见体裁剪的每个图元引起一个选择命中 退出选择模式; 分析命中记录纹理映射的基本原理凹凸纹理映射(bump mapping)位移映射(displacement mapping)环境纹理映射(e

12、nvironment mapping)基于光照映射的快速绘制(light mapping)高级纹理映射技术总结将一个一维、二维、三维的图像映射到几何物体上的过程纹理映射的用途 仿真自然界的材质 减少几何复杂度 图像warping 反射效果模拟 。stxyz图像:即纹理几何屏幕图像和几何在不同的管道中处理,最后在光栅处理器中融合。 复杂的纹理不影响几何的复杂性。几何管道顶点象素管道图像光栅处理器256 x 256的图像映射到 一个长方形,并进行透视投影。 二维纹理图像 纹理坐标 纹理映射到三维空间中平面 三步设置纹理读入或者生成图像将图像赋到某个纹理上打开纹理映射功能将纹理坐标赋到顶点上设置纹理

13、参数 Wrapping(重复pattern的方式), filtering(纹理采样的滤波方式):类似于纹理图像序列的显示列表(可加快速度) 每个纹理对象对应一个图像 可以由多个图形上下文共享生成纹理名字glGenTextures( n, *texIds );绑定纹理图像(id为纹理对象名字)glBindTexture( target, id );从CPU内存的一块图像定义一个纹理对象glTexImage2D( target, level, components, w, h, border, format, type, *texels ); 图像的尺寸是 2的幂次纹理颜色由象素处理管道处理如果图

14、像的维数不是2的幂次 gluScaleImage( format, w_in, h_in, type_in, *data_in, w_out, h_out, type_out, *data_out ); *_in 源图像源图像 *_out 目标图像目标图像 Format:图像格式(图像格式(GL_RGB) Type:图像数据格式图像数据格式在缩放过程中进行插值和滤波将帧缓冲器的内容设定为纹理图像的来源设置某个纹理的一部分拷贝部分纹理 glCopyTexSubImage2D(.)基于参数化的纹理坐标glTexCoord*() 指定每个顶点处的纹理st1, 10, 10, 01, 0(s, t)

15、= (0.2, 0.8)(0.4, 0.2)(0.8, 0.4)ABCabc纹理空间物体空间纹理映射区域通常是平面或曲面,计算任意空间曲面与纹理域的对应关系本质上是一个参数化的过程 避免出现扭曲、变形的效果 最好是保角映射或保面积映射平面方程数学曲面物体表面属性 过程式纹理函数生成自动生成纹理坐标 glTexGenifdv()指定一个平面 基于到平面的距离生成纹理坐标生成模式 GL_OBJECT_LINEAR GL_EYE_LINEAR GL_SPHERE_MAP0DCzByAx纹理滤波模式 缩小或放大时的滤波方式 mipmap 缩小滤波纹理取址方式 Clamping(边界颜色) repeat

16、ing(重复)纹理融合函数 如何混合纹理的颜色与物体表面计算的颜色: 融合,modulate 或者替换纹理多边形放大时缩小多边形纹理例如:Mipmap 允许对一个纹理进行预处理,生成小尺寸纹理对于小的物体,能减少插值错误,加快绘制速度Mipmap由OpenGL自动生成可以在定义纹理的时候声明mipmap层次GLU mipmap 生成函数OpenGL 1.2 引入了高级的 LOD(层次细节) 控制纹理插值模式函数使用例子:glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP )glTexParameteri( GL_TEXTURE

17、_2D, GL_TEXTURE_WRAP_T, GL_REPEAT )(上左)重复;(上右)镜像;(下左)截断;(下右)重复边界颜色 控制纹理是如何映射到物体上 glTexEnvfiv( GL_TEXTURE_ENV, prop, param ) GL_TEXTURE_ENV_MODE 模式: GL_MODULATE GL_BLEND GL_DECAL(GL_REPLACE)设置混合颜色: GL_TEXTURE_ENV_COLORDemo: MFCTex对同一个物体实施多步光照明计算和多个纹理映射,这就是三维绘制引擎中的多步纹理技术(multipass texture mapping)两步绘制: 计算漫射分量并与纹理相乘 计算镜面分量并与第一步计算结果相加。 在每一步中,纹理值可以和其他光照明分量进行多种融合操作,包括替代、相加、混合等。alpha通道扮演了一个远远超过透明度的角色。第1到第4步:累积凹凸映射;第5步:漫射光分量;第6步:基纹理;第7步:镜面光分量(可选);第8步:自身发射光分量(可选);第9步:体/雾/大气效果(可选);第10步:屏幕闪烁(可

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论