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

上传人:牧羊曲112 文档编号:2167155 上传时间:2023-01-23 格式:PPT 页数:62 大小:3.19MB
返回 下载 相关 举报
OpenGL高级课题与纹理映射技术教程课件.ppt_第1页
第1页 / 共62页
OpenGL高级课题与纹理映射技术教程课件.ppt_第2页
第2页 / 共62页
OpenGL高级课题与纹理映射技术教程课件.ppt_第3页
第3页 / 共62页
OpenGL高级课题与纹理映射技术教程课件.ppt_第4页
第4页 / 共62页
OpenGL高级课题与纹理映射技术教程课件.ppt_第5页
第5页 / 共62页
点击查看更多>>
资源描述

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

1、OpenGL高级课题与纹理映射技术,OpenGL 架构,顶点变换与光照计算,纹理映射,帧缓冲区操作,像素级光照计算,OpenGL其他高级课题,关于帧缓冲区(frame buffer),Alpha:第四维颜色分量,透明度的度量模拟透明物体玻璃、水等合成图像反走样混合状态下有效 glEnable(GL_BLEND);,Alpha测试,基于alpha值选择象素glAlphaFunc(func,value)glEnable(GL_ALPHA_TEST);在纹理映射时用alpha值作为蒙板,混合,结合输出与帧缓冲器中原有的象素值glBlendFunc(src,dst),裁剪包围盒,其他的裁剪测试glSc

2、issor(x,y,w,h)包围盒外的象素被裁剪掉便于更新视域的一小块区域影响glClear()操作,模板缓冲区(stencil buffer),用模板缓冲区的值控制绘制无法通过模板测试的象素将不被绘制例子:在模板缓冲区中创建一个蒙板,并仅绘制那些不在蒙板区域内的物体,控制模板缓冲区,glStencilFunc(func,ref,mask)用func比较缓冲区的值与 ref只对那些mask值为1的象素进行操作func 是一个标准比较函数glStencilOp(fail(模板失败),zfail(模板通过,z失败),zpass(两者都通过))基于模板测试和深度测试的结果相应调整模板缓冲区的值:GL

3、_KEEP,GL_INCR,创建模板,glInitDisplayMode(|GLUT_STENCIL|);glEnable(GL_STENCIL_TEST);glClearStencil(0 x0);glStencilFunc(GL_ALWAYS,0 x1,0 x1);glStencilOp(GL_REPLACE,GL_REPLACE,GL_REPLACE);绘制蒙板,使用模板,当stencil=1绘制物体glStencilFunc(GL_EQUAL,0 x1,0 x1)当stencil!=1绘制glStencilFunc(GL_NOTEQUAL,0 x1,0 x1);glStencilOp(

4、GL_KEEP,GL_KEEP,GL_KEEP);,抖动,glEnable(GL_DITHER);抖动用于加强视觉效果用于模拟更多颜色打印设置目前,该功能很少被用到,象素上的逻辑操作,使用位逻辑操作结合多个象素值glLogicOp(mode);命令模式GL_XORGL_AND目前,该功能很少被用到,累积缓冲器,颜色缓冲器合成的问题有限颜色分辨率截断精度损失累积缓冲区扮演着“浮点”颜色缓冲区的角色合成到积累缓冲区将结果转换到帧缓冲区,累积缓冲区存取,glAccum(op,value)操作在积累缓冲区中的操作:GL_ADD,GL_MULT读缓冲区操作:GL_ACCUM,GL_LOAD写缓冲区操作:

5、GL_RETURNglAccum(GL_ACCUM,0.5)将写缓冲区的每一个值乘以0.5,然后加到累积缓冲区中,累积缓冲区的应用,颜色合成:透明全屏反走样:A-buffer算法景深:Depth Cue滤波:运动模糊:Motion blur,反走样(Anti-aliasing),消除锯齿状glEnable(mode)GL_POINT_SMOOTHGL_LINE_SMOOTHGL_POLYGON_SMOOTH象素的Alpha值由象素被覆盖大小决定可以是RGBA或颜色索引模式,全屏反走样:视点抖动,当我们略微移动视点时,图像随之平移每一幅图像有不同的走样情况用积累缓冲区对图像作平均,将消除这些走样

6、,景深,沿平行焦平面的方向移动视点,前平面,后平面,焦平面,眼睛位置1,眼睛位置2,景深,雾化,glFogif(property,value)景深效果处理指定线性雾化渐变区域大小GL_FOG_LINEAR环境效果模拟真实雾化效果GL_FOG_EXPGL_FOG_EXP2,雾化,高级成像,成像子集只有当GL_ARB_imaging有定义时才有效颜色矩阵卷积颜色表直方图MinMax高级混合,立即模式、显示列表和保留模式,立即模式(immediate mode)图元直接发送到绘制流水线并显示不需要显卡内存显示列表(display list)图元保存在显示列表中、显示列表保存在显卡中保留模式(reta

7、ined mode)所有数据预先置入显存,立即模式与显示列表,立即模式,列出显示,显示列表,多项式求值器,顶点操作和图元组装,光栅化,象素操作,纹理内存,CPU,象素操作,帧缓冲,显示列表,创建显示列表GLuint id;void init(void)id=glGenLists(1);glNewList(id,GL_COMPILE);/*other OpenGL routines*/glEndList();调用显示列表void display(void)glCallList(id);,显示列表,不是所有的OpenGL程序都能存储在显示列表当中显示列表创建后,状态仍然能够被改变显示列表可以嵌套调

8、用显示列表一旦创建,不能进行编辑令列表(A)调用其他列表(B,C,或D)删除A并按照要求调用B,C或D,显示列表层次,考虑一个汽车模型创建底盘显示列表创建轮胎显示列表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

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

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

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

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

13、多个图形上下文共享生成纹理名字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_out,*data_o

14、ut);*_in 源图像*_out 目标图像Format:图像格式(GL_RGB)Type:图像数据格式在缩放过程中进行插值和滤波,设定纹理的其他方法,将帧缓冲器的内容设定为纹理图像的来源glCopyTexImage1D(.)glCopyTexImage2D(.)设置某个纹理的一部分glTexSubImage1D(.)glTexSubImage2D(.)glTexSubImage3D(.)拷贝部分纹理 glCopyTexSubImage2D(.),纹理映射,基于参数化的纹理坐标glTexCoord*()指定每个顶点处的纹理,s,t,1,1,0,1,0,0,1,0,(s,t)=(0.2,0.8)

15、,(0.4,0.2),(0.8,0.4),A,B,C,a,b,c,纹理空间,物体空间,生成纹理坐标,纹理映射区域通常是平面或曲面,计算任意空间曲面与纹理域的对应关系本质上是一个参数化的过程 避免出现扭曲、变形的效果 最好是保角映射或保面积映射平面方程数学曲面物体表面属性 过程式纹理函数生成,OpenGL中生成纹理坐标,自动生成纹理坐标glTexGenifdv()指定一个平面基于到平面的距离生成纹理坐标生成模式GL_OBJECT_LINEARGL_EYE_LINEAR GL_SPHERE_MAP,过程式纹理坐标生成,纹理映射演示,纹理映射参数,纹理滤波模式缩小或放大时的滤波方式mipmap 缩小

16、滤波纹理取址方式Clamping(边界颜色)repeating(重复)纹理融合函数如何混合纹理的颜色与物体表面计算的颜色:融合,modulate 或者替换,滤波模式,例如:glTexParameteri(target,type,mode);,Mipmapped 纹理,Mipmap 允许对一个纹理进行预处理,生成小尺寸纹理对于小的物体,能减少插值错误,加快绘制速度Mipmap由OpenGL自动生成可以在定义纹理的时候声明mipmap层次glTexImage*D(GL_TEXTURE_*D,level,)GLU mipmap 生成函数gluBuild*DMipmaps()OpenGL 1.2 引入

17、了高级的 LOD(层次细节)控制,点采样、双向滤波、三线性滤波、各向异性滤波,纹理插值模式,纹理取址方式,函数使用例子:glTexParameteri(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_MODULATE

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

19、:漫射光分量;第6步:基纹理;第7步:镜面光分量(可选);第8步:自身发射光分量(可选);第9步:体/雾/大气效果(可选);第10步:屏幕闪烁(可选)。,单步多纹理映射技术,在单个绘制步骤中应用两个或多个纹理:单步多纹理映射技术(multi-texture mapping)。定义由一系列纹理步骤组成的纹理融合嵌套流水线。通常,第一个纹理步骤融合两个纹理值(或者插值后的顶点值)的RGB和alpha分量。其结果送入第二个步骤与其他的纹理值(或者插值后的顶点值)进行处理,直到完成所有的纹理步骤,最后与保存在帧缓冲器中的值进行融合或替代操作。可编程图形硬件可以处理8个纹理的同时融合,Half life中的辐射法向纹理映射,多步纹理映射:单步多纹理映射,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号