纹理映射技术

上传人:飞*** 文档编号:52165513 上传时间:2018-08-18 格式:PPT 页数:84 大小:7.93MB
返回 下载 相关 举报
纹理映射技术_第1页
第1页 / 共84页
纹理映射技术_第2页
第2页 / 共84页
纹理映射技术_第3页
第3页 / 共84页
纹理映射技术_第4页
第4页 / 共84页
纹理映射技术_第5页
第5页 / 共84页
点击查看更多>>
资源描述

《纹理映射技术》由会员分享,可在线阅读,更多相关《纹理映射技术(84页珍藏版)》请在金锄头文库上搜索。

1、真实感图形绘制真实感图形绘制-纹理映射技术纹理映射技术王长波 博士 华东师范大学软件学院计算机图形学 提出问题 真实感图形绘制: 计算机图形输出设备上绘制出能够以假乱真的景象。 如何表现物体表面的丰富细节?纹理映射技术是真实感图形的重要绘制技术之一.计算量太大!可以采用纹理映射技术!更精细的几何; 更精确的光照计 算;“All it takes is for the rendered image to look right” Jim BlinnExample 1Example 2Example 3 纹理映射的基本理论 基本概念 实现纹理映射的基本过程 纹理几何映射关系处理 纹理映射的实现 纹理

2、映射的D3D实现 纹理映射的OpenGL实现 高级纹理映射技术介绍 纹理优化处理技术 多层纹理映射 凸凹纹理映射 环境映照技术提 要What is texture mapping?“All it takes is for the rendered image to look right” Jim Blinn 纹理贴图是一个用图像、函数或其它数据源来改变表面 在每一处的外观的过程。 例如,我们不必用精确的几何去表 现一块砖墙,而只需把一幅砖墙的 图像贴到一个多边形上。 除非观察者非常靠近墙,否则我们 并不会觉得缺少几何细节。 既节省了大量的造型工作量,也节 省了内存空间,加快了绘制速度。基本原理

3、纹理映射-几何和图片之间的对应关系如何映射? 纹理坐标: 每个像素的纹理坐标就是简单的(u , v) 坐标,它指定 了像素正准备被映射到的纹理的纹理单元。 对应纹理图像,左下角为 (0,0) 右上角为 (1,1); 可以设定顶点在图像空间上的纹理坐标tx ty, 该象 素就画对应该u, v坐标的RGB颜色; 一般一个四边形的纹理坐标: (0,0)(0,1)(1,0)(1,1) 通过纹理坐标:v0v1v2t2t0t1(1,1)(0,0)xyTexture SpaceTriangle (in any space)纹理空间与模型空间的对应基本实现步骤: Three steps -Specify te

4、xture Read or generate image Assign to texture Enable texturing - Assign texture coordinates to vertices- Specify texture parameters Wrapping, filtering, etc. 一般为二维图片 可以是一张图片(8位, 24位, 32位) 也可以是实际生成的一张图片 长宽尺寸为2的倍数1. 读入纹理位图2. 如何映射 利用纹理坐标来定义从图片到几何的映射: 要将该纹理映射到一个三角形上, 需设置三角形的 三个顶点在图像空间上的纹理坐标tx ty, 再对应计

5、算每个几何像素在纹理图像上的对应RGB颜色; 一般一个四边形的纹理坐标: (0,0)(0,1)(1,0)(1,1) 3D Game Studio.3. 纹理插值 我们只指定了三角形顶点处的纹理坐标,中间每个象素的纹理坐标(ti, tj)可用线性插值; 一般双线性插值; 从而三角形上每个象素点都可对应地到纹理图片上去 取颜色 图像与几何体的尺寸不一致怎么办?思考? 几何对应的纹理空间超出0,1)纹理空间怎么办? 几何物体本身有颜色怎么办? 在硬件图形加速卡中,纹理图像的大小经常为2m2n(或 者2m2m)的纹素,其中m和n为非负整数。 但是几何尺寸不一定正好是2的倍数,另外几何尺寸可能 与纹理图

6、像尺寸差别很大; 若投影得到的象素数目比原始纹理大,则需要把纹理 图像放大(magnification); 若投影得到的象素数目比原始纹理小,则需要把纹理 图像缩小(minification);问题1: 纹理图像缩放(纹理采样方式)纹理放大一幅326464的纹理应用到的纹理应用到 一矩形,非常近看。一矩形,非常近看。左图采用左图采用最近领域滤波最近领域滤波 ,即对每个象素选择最,即对每个象素选择最 近的纹素。近的纹素。右图采用最近四个纹素右图采用最近四个纹素 的的双线性插值双线性插值块状效果明 显,质量差锯齿状消失 ,质量好如:双线性插值(Bi-lnear Interpolation)纹理缩小

7、 当纹理图像缩小时,多个纹素可能覆盖一个象 素单元。为了得到每个象素正确的颜色,应该 综合考虑影响该象素的那些纹素。棋盘格纹理多边形通过一行象素,显示多个纹素可影响单个象素1. 点采样(Nearest neighbor)2. Mipmapping3. 求和面积表(summed area table) 最近邻域法: 选择在象素中心可见的纹素。但会引起严重的走样现象,见上图 。当这类表面相对视点移动时,走样现象更加明显,称为时间走 样 (temporal aliasing) 。 双线性插值: 效果仅比最近邻域法稍好,也会引起较严重的走样现象。 Mipmap方式: 对纹理进行预处理,建立多个纹素覆盖

8、单个象素的快速逼近计算 的数据结构。这样,一个采样点可以检索出一个或多个纹素的效 果。TilingTexture Space(0,0)(1,1)问题2: 纹理重复方式(0,0)(1,1)(0,0 )(1,1)ClampingMirroring常用对应函数 wrap or tile: 纹理图像在表面重复。例子:地上的大理石 贴图 mirror: 纹理图像在表面重复, 但每隔一幅进行翻转 (flipped)。这样在纹理的边界处,纹理可以保持连续。 clamp : 把0,1)范围之外的进行截断。截断到0,1)内的半 个纹素。 border :参数范围在0,1) 之外的用单独定义的边界颜色或 把纹理的

9、边作为边界。用于在表面上印花样,地形绘制中 相邻纹理的缝合。截断到0,1)外的半个纹素。例子repeat mirror clamp border Replace: 把原来表面的颜色替换为纹 理的颜色 Decal(印花):与替换类似,但是若纹理 中包含Alpha值,则用它与表面的颜色 进行混合。 Modulate(调节):把表面的颜色与纹理 颜色相乘 .问题3: 纹理与背景的叠加融合 纹理映射的基本理论 基本概念 实现纹理映射的基本过程 纹理几何映射关系处理 纹理映射的实现 纹理映射的D3D实现 纹理映射的OpenGL实现 高级纹理映射技术介绍 纹理优化处理技术 多层纹理映射 凸凹纹理映射 环境

10、映照技术提 要Direct3D纹理映射过程 载入纹理 分配顶点纹理坐标 设置当前渲染纹理 设置纹理渲染状态 渲染顶点缓冲区, 绘制物体 载入纹理 CreateTexture() 载入纹理:LoadBmpTexture24Bit() LockRect和UnlockRect访问纹理资源 从磁盘生成并载入纹理 D3DXCreateTextureFromFile 程序结束时释放指针:g_pTexture-Release() 分配顶点纹理坐标 设置当前渲染纹理 SetTexture() 设置纹理渲染状态 SetTextureStageState() 渲染顶点缓冲区 SetStreamSource( 0,

11、 g_pVB, 0, sizeof(CUSTOMVERTEX) ); SetFVF( D3DFVF_CUSTOMVERTEX ); DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2); 设置纹理采样方式 调用函数SetSamplerState设置纹理采样方式 四种: Nearest-Point Sampling Linear Texture Filtering Anisotropic Texture Filtering Texture Filtering with Mipmaps 程序演示OpenGL纹理映射过程 将纹理装入内存 LoadFromFile调用完成

12、图片解码读入的工作; 图片格式有.bmp/.jpg/.tif/.gif/.rgb等。 将纹理发送给OpenGL管道: glGenTextures (n,*textures); 分配顶点纹理坐标 指定当前纹理坐标的命令是glTexCoord*(s,t,r,q); 纹理映射参数设置 对于这种超出纹理图范围的情况,可用: glTexParameter*(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S/T,G L_REPEAT/GL_CLAMP); 选择: GL_REPEAT:当纹理比表面小时重复使用纹理以填满每个点。 GL_CLAMP:比1大的当作1,比0小的当作0。 对纹理的缩放等

13、, OpenGL提供了滤波函数: glTexParameter*(GL_TEXTURE_2D,GL_TEXTURE_MAG/MIN_F ILTER,GL_NEAREST/GL_LINEAR);。 放大和缩小的处理参数: GL_NEAREST:取比较接近的那个像素。 GL_LINEAR:以周围四个像素的平均值做为纹理。 bilinear:二次插值,精度更高,但需要自己动手计算。 程序演示 给定一张图片,绘制一个立方体, 利用VC+ 和D3D编写代码实现不同的纹理映射方式. 可以在Direct3DTutorials的Tut05_Textures上 修改.练习 纹理映射的基本理论 基本概念 实现纹理

14、映射的基本过程 纹理几何映射关系处理 纹理映射的实现 纹理映射的D3D实现 纹理映射的OpenGL实现 高级纹理映射技术介绍 纹理优化处理技术 多层纹理映射 凸凹纹理映射 环境映照技术提 要 高级纹理映射技术 纹理优化处理技术 Mipmapiing Texture Caching 纹理压缩 多层纹理映射 凸凹纹理映射 环境映照技术纹理优化处理技术金 字 塔 结 构Level 0Level 1Level 211/41/16d轴1. Mipmapping技术-避免图像的过度放大或缩小 Mipmapping是纹理反走样最受欢迎的方法。目 前,很多图形加速卡支持该功能; 根据几何的大小, 调整纹理的大

15、小, 以避免拉伸和 缩小; 等比性地缩放, 图片大小必须为2的n次。 调用函数SetSamplerState设置即可. image pyramid, precompute averaged versionsWithout MIP-mappingWithout MIP-mappingWith MIP-mappingWith MIP-mapping2. Texture Caching(纹理缓存) 复杂的应用需要相当多的纹理, 不一定把所有 的纹理都一次性送到显存; 有多种纹理高速缓存技术: 在速度和内存中的纹理数目之间取得平衡。例如: 当贴了纹理的多边形离视点较远时,可只载入需要 的子纹理。使用纹理内存的一般原则: 尽量使纹理小:不要大于使得纹理需要放大。 尽量使得使用相同纹理的多边形成组。 采用Tiling或者Mosaicing技术:把一些小纹理 拼成一块大纹理,这样可以避免纹理的切换, 加快存取的速度。3. 纹理压缩 一个直接针对纹理内存和带宽的解决方法是固定 速率的纹理压缩(fixed-rate texture compr

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

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