高级计算机图形学 讲 授:董兰芳 研究方向:科学计算可视化 图形、图像处理 模式识别 Telephone:

Slides:



Advertisements
Similar presentations
一、 一阶线性微分方程及其解法 二、 一阶线性微分方程的简单应用 三、 小结及作业 §6.2 一阶线性微分方程.
Advertisements

第五节 函数的微分 一、微分的定义 二、微分的几何意义 三、基本初等函数的微分公式与微分运算 法则 四、微分形式不变性 五、微分在近似计算中的应用 六、小结.
2.8 函数的微分 1 微分的定义 2 微分的几何意义 3 微分公式与微分运算法则 4 微分在近似计算中的应用.
2.5 函数的微分 一、问题的提出 二、微分的定义 三、可微的条件 四、微分的几何意义 五、微分的求法 六、小结.
§3.4 空间直线的方程.
3.4 空间直线的方程.
第三章 数据类型和数据操作 对海量数据进行有效的处理、存储和管理 3.1 数据类型 数据源 数据量 数据结构
第一章 行列式 第五节 Cramer定理 设含有n 个未知量的n个方程构成的线性方程组为 (Ⅰ) 由未知数的系数组成的n阶行列式
第5章 定积分及其应用 基本要求 5.1 定积分的概念与性质 5.2 微积分基本公式 5.3 定积分的换元积分法与分部积分法
第三节 格林公式及其应用(2) 一、曲线积分与路径无关的定义 二、曲线积分与路径无关的条件 三、二元函数的全微分的求积 四、小结.
2-7、函数的微分 教学要求 教学要点.
第14章 c++中的代码重用.
第十章 真实感图形绘制 基本概念 简单光照模型 基于简单光照模型的多边形绘制.
Introduction of Computer Graphics
真实感图形 授课教师: 单位:.
第六章 三维真实感物体显示技术 虚拟现实(Virtual Reality,简称VR)技术是一种逼真的模拟人在自然环境中视觉、听觉、运动等行为的人机界面技术。其目的是:不仅能够在多维空间仿真建模,而且能够帮助人们获取知识和形成新的概念,Mark Green给出了一个简明的虚拟现实应用系统模型,如图6.1所示。
物体识别 3D建图 semantic mapping
走进编程 程序的顺序结构(二).
辅导课程六.
绘制圆与多边形 椭圆形 绘制椭圆形的方法是 drawOval(x ,y , width , height), 绘制实心椭圆形的方法是
第四章 图元的属性 讲 授:董兰芳 研究方向:科学计算可视化 图形、图像处理 模式识别 Telephone:
纹理映射.
高级计算机图形学 讲 授:董兰芳 研究方向:科学计算可视化 图形、图像处理 模式识别 Telephone:
数学模型实验课(三) 插值与三维图形.
中国科学技术大学计算机系 陈香兰(0551- ) Spring 2009
双曲线的简单几何性质 杏坛中学 高二数学备课组.
工业机器人技术基础及应用 主讲人:顾老师
SOA – Experiment 2: Query Classification Web Service
图片与视频数字化. 图片与视频数字化 图片分类 根据图片的构成元素来分 位图: 由像素组成,计算机按顺序存储每个像素点 的颜色信息的保存方式获得的图片。 位图放大后会模糊失真,存储空间相对较大。 矢量图: 由图元组成,通过数学公式计算获得的图片。 放大后不会失真,占用空间小。
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
第二十二章 曲面积分 §1 第一型曲面积分 §2 第二型曲面积分 §3 高斯公式与斯托克斯公式.
Three stability circuits analysis with TINA-TI
VisComposer 2019/4/17.
OpenGL几何变换程序.
第五节 对坐标的曲面积分 一、 对坐标的曲面积分的概念与性质 二、对坐标的曲面积分的计算法 三、两类曲面积分的联系.
分裂对象模型 C++ otcl.
计算机图形学 Computer Graphics 高级图形绘制方法 —纹理及纹理映射.
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
复习: 若A(x1,y1,z1) , B(x2,y2,z2), 则 AB = OB - OA=(x2-x1 , y2-y1 , z2-z1)
正切函数的图象和性质 周期函数定义: 一般地,对于函数 (x),如果存在一个非零常数T,使得当x取定义域内的每一个值时,都有
iSIGHT 基本培训 使用 Excel的栅栏问题
§6.7 子空间的直和 一、直和的定义 二、直和的判定 三、多个子空间的直和.
相关与回归 非确定关系 在宏观上存在关系,但并未精确到可以用函数关系来表达。青少年身高与年龄,体重与体表面积 非确定关系:
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
O x y i j O x y i j a A(x, y) y x 5.4 平面向量的坐标运算 5.4 平面向量的坐标运算 5.4 平面向量的坐标运算 5.4 平面向量的坐标运算 5.4 平面向量的坐标运算 5.4 平面向量的坐标运算 5.4 平面向量的坐标运算.
魏新宇 MATLAB/Simulink 与控制系统仿真 魏新宇
海报题目 简介: 介绍此项仿真工作的目标和需要解决的问题。 可以添加合适的图片。
第15讲 特征值与特征向量的性质 主要内容:特征值与特征向量的性质.
§2 方阵的特征值与特征向量.
4.6 图形的位似     观察思考:这两幅图片有什么特征? 都是有好几张相似图形组成,每个对应顶点都经过一点.
第六章 Excel的应用 五、EXCEL的数据库功能 1、Excel的数据库及其结构 2、Excel下的数据排序 (1)Excel的字段名行
图片与视频数字化. 图片与视频数字化 图片分类 根据图片的构成元素来分 位图: 由像素组成,计算机按顺序存储每个像素点 的颜色信息的保存方式获得的图片。 位图放大后会模糊失真,存储空间相对较大。 矢量图: 由图元组成,通过数学公式计算获得的图片。 放大后不会失真,占用空间小。
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
第四节 向量的乘积 一、两向量的数量积 二、两向量的向量积.
反比例函数(复习课) y o x 常州市新北区实验中学 高兴林.
第8章 创建与使用图块 将一个或多个单一的实体对象整合为一个对象,这个对象就是图块。图块中的各实体可以具有各自的图层、线性、颜色等特征。在应用时,图块作为一个独立的、完整的对象进行操作,可以根据需要按一定比例和角度将图块插入到需要的位置。 2019/6/30.
本底对汞原子第一激发能测量的影响 钱振宇
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
位似.
《偏微分方程》第一章 绪论 第一章 绪论 1.1.
纹理映射.
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
生活中的几何体.
质量控制(QC)模式 BrookFIELD.
§2 自由代数 定义19.7:设X是集合,G是一个T-代数,为X到G的函数,若对每个T-代数A和X到A的函数,都存在唯一的G到A的同态映射,使得=,则称G(更严格的说是(G,))是生成集X上的自由T-代数。X中的元素称为生成元。 A变, 变 变, 也变 对给定的 和A,是唯一的.
第三章 图形的平移与旋转.
3.3.2 两点间的距离 山东省临沂第一中学.
海报题目 简介: 介绍此项仿真工作的目标和需要解决的问题。 可以添加合适的图片。
Presentation transcript:

高级计算机图形学 讲 授:董兰芳 研究方向:科学计算可视化 图形、图像处理 模式识别 Telephone:0551-3603484 2018/9/19 高级计算机图形学 讲 授:董兰芳 研究方向:科学计算可视化 图形、图像处理 模式识别 Telephone:0551-3603484 Email:lfdong@ustc.edu.cn Homepage: http://staff.ustc.edu.cn/~lfdong 中国科学技术大学 视觉计算与可视化实验室

第八章 离散技术 离散数据最重要的用途之一就是表 面绘制。 8.6 映射方法 8.7 纹理映射 8.8 OpenGL中的纹理映射 计算机图形学 2018/9/19 第八章 离散技术 离散数据最重要的用途之一就是表 面绘制。 8.6 映射方法 8.7 纹理映射 8.8 OpenGL中的纹理映射 8.9 纹理生成 1.计算机图形就是计算机生成的图片.

8.6 映射方法 图形显示卡可以每秒钟显示多达一千万个多边形,但这个速度仍不能满足模拟许多自然现象和天然物质的要求: 云 草 地貌 树皮 计算机图形学 2018/9/19 8.6 映射方法 图形显示卡可以每秒钟显示多达一千万个多边形,但这个速度仍不能满足模拟许多自然现象和天然物质的要求: 云 草 地貌 树皮 毛发 水波与火焰 1.计算机图形就是计算机生成的图片. 越来越复杂的模型不是唯一的解决方法! 3

8.6 映射方法 例:橙子的建模 用橙色的球表示橙子太简单。 用更复杂形状代替球没有表示出表面的特性。 计算机图形学 2018/9/19 8.6 映射方法 例:橙子的建模 用橙色的球表示橙子太简单。 用更复杂形状代替球没有表示出表面的特性。 为了模拟所有的微凹,需要相当多的多边形。 可以将真实橙子的照片“粘贴”到简单的几何模型上。 以上过程就是纹理映射,结果可能仍然不令人满意, 因为所得曲面是光滑的,需要改变局部形状,可以采用 凹凸映射。 1.计算机图形就是计算机生成的图片. 4

8.6 映射方法 三种映射方法 纹理映射利用图像填充多边形。 环境映射(反射映射)利用环境的图像进行纹理映射。 可以模拟高度镜面曲面。 计算机图形学 2018/9/19 8.6 映射方法 三种映射方法 纹理映射利用图像填充多边形。 环境映射(反射映射)利用环境的图像进行纹理映射。 可以模拟高度镜面曲面。 凹凸映射在生成显示结果的过程中可以改变法向量。 1.计算机图形就是计算机生成的图片. 5

8.6 映射方法 纹理映射的图案 具有固定样式的图案。 经常用于填充多边形的规则图案。 通过过程纹理生成的图案。 计算机图形学 2018/9/19 8.6 映射方法 纹理映射的图案 具有固定样式的图案。 经常用于填充多边形的规则图案。 通过过程纹理生成的图案。 通过数字化处理后得到的图像。 1.计算机图形就是计算机生成的图片. 6

计算机图形学 2018/9/19 8.6 映射方法 纹理映射 1.计算机图形就是计算机生成的图片. 环境映射 凹凸映射 7

8.6 映射方法 三种映射的共同点 作为片元处理的一部分。 改变单个片元的明暗值。 都与存储为一维、二维或三维数字图像的贴图有关。 计算机图形学 2018/9/19 8.6 映射方法 三种映射的共同点 作为片元处理的一部分。 改变单个片元的明暗值。 都与存储为一维、二维或三维数字图像的贴图有关。 保持低的几何复杂性,但能产生复杂几何的视觉效果。 都可能产生走样误差。 1.计算机图形就是计算机生成的图片. 8

8.6 映射方法 映射技术是在绘制流水线的最后阶段实现的,非常有效,这样可以减少了许多不必要的映 射。 9 计算机图形学 2018/9/19 8.6 映射方法 映射技术是在绘制流水线的最后阶段实现的,非常有效,这样可以减少了许多不必要的映 射。 1.计算机图形就是计算机生成的图片. 9

第八章 离散技术 8.6 映射方法 8.7 纹理映射 8.8 OpenGL中的纹理映射 8.9 纹理生成 10 计算机图形学 2018/9/19 第八章 离散技术 8.6 映射方法 8.7 纹理映射 8.8 OpenGL中的纹理映射 8.9 纹理生成 1.计算机图形就是计算机生成的图片. 10

8.7 纹理映射 以数组形式存储在处理器内存里的二维图像称为纹理, 此时数组元素称为纹素(texel),可以由应用程序生成, 计算机图形学 2018/9/19 8.7 纹理映射 以数组形式存储在处理器内存里的二维图像称为纹理, 此时数组元素称为纹素(texel),可以由应用程序生成, 也可以将照片扫描输入。 把离散数组看成一个连续的二维矩形区域纹理图案 T(s,t),独立变量s和t是纹理坐标一般把纹理坐标缩放到 [0,1]区间。 1.计算机图形就是计算机生成的图片. 11

计算机图形学 2018/9/19 8.7 纹理映射 把图像映射到曲面上是一个非常复杂的 任务。 1.计算机图形就是计算机生成的图片. 12

8.7 纹理映射 涉及到的坐标系 参数坐标系可以用来建立曲线、曲面。 纹理坐标系用来识别要被映射的图像上的点。 计算机图形学 2018/9/19 8.7 纹理映射 涉及到的坐标系 参数坐标系可以用来建立曲线、曲面。 纹理坐标系用来识别要被映射的图像上的点。 世界坐标系从概念上说,就是映射发生的地方。 屏幕坐标系最终图像生成的地方。 1.计算机图形就是计算机生成的图片. 13

计算机图形学 2018/9/19 8.7 纹理映射 纹理映射框架 1.计算机图形就是计算机生成的图片. 14

8.7 纹理映射 映射函数 考虑从纹理坐标到曲面上一点的映射。 直观地看,需要如下函数 x=x(s,t) y=y(s,t) z=z(s,t) 计算机图形学 2018/9/19 8.7 纹理映射 映射函数 考虑从纹理坐标到曲面上一点的映射。 直观地看,需要如下函数 x=x(s,t) y=y(s,t) z=z(s,t) w=w(s,t) 实际采用的是间接方法。 1.计算机图形就是计算机生成的图片. 15

8.7 纹理映射 逆映射 给定对象上的一个点,我们想知道它对应 于纹理中的哪个点。 此时需要如下形式的映射 s = s(x,y,z,w) 计算机图形学 2018/9/19 8.7 纹理映射 逆映射 给定对象上的一个点,我们想知道它对应 于纹理中的哪个点。 此时需要如下形式的映射 s = s(x,y,z,w) t = t(x,y,z,w) 这样的函数一般是很难求出来的。 1.计算机图形就是计算机生成的图片. 16

8.7 纹理映射 实际困难 假设要计算中心在(xs, ys)的一个矩形像素的颜色。 中心点对应于对象上的点(x,y,z) 。 计算机图形学 2018/9/19 8.7 纹理映射 实际困难 假设要计算中心在(xs, ys)的一个矩形像素的颜色。 中心点对应于对象上的点(x,y,z) 。 如果对象是弯曲的,那么矩形像素的原像是一个曲 边四边形。 这个曲边四边形在纹理上的原像才是对当前矩形像 素的颜色有贡献的纹理元素。 1.计算机图形就是计算机生成的图片. 17

8.7 纹理映射 纹理坐标到屏幕坐标的映射 xs=xs(s,t) ys=ys(s,t) (xs,ys)表示颜色缓存中的某个位置。 18 计算机图形学 2018/9/19 8.7 纹理映射 纹理坐标到屏幕坐标的映射 xs=xs(s,t) ys=ys(s,t) (xs,ys)表示颜色缓存中的某个位置。 1.计算机图形就是计算机生成的图片. 18

计算机图形学 2018/9/19 8.7 纹理映射 走样现象 1.计算机图形就是计算机生成的图片. 19

8.7 纹理映射 用在纹理原像上对应区域的明暗效果的平均值赋给 当前像素很难实现,也不是完美的。 计算机图形学 2018/9/19 8.7 纹理映射 用在纹理原像上对应区域的明暗效果的平均值赋给 当前像素很难实现,也不是完美的。 右图经上述处理后也得不到所需要的结果,但这个 问题来自于低分辨率的局限。 对于规则纹理,这种效果非常明显。 1.计算机图形就是计算机生成的图片. 20

8.7 纹理映射 映射的确定 考虑由参数方程定义的曲面 p(u,v)=(x(u,v),y(u,v),z(u,v))。 计算机图形学 2018/9/19 8.7 纹理映射 映射的确定 考虑由参数方程定义的曲面 p(u,v)=(x(u,v),y(u,v),z(u,v))。 通常采用如下形式从纹理元素对应到曲面上的 点 u = as + bt + c, v = ds + et + f, 只要ae ≠bd, 上述映射是可逆的。 1.计算机图形就是计算机生成的图片. 21

8.7 纹理映射 没有考虑曲面的弯曲为了填充曲面,纹理在 不同方向进行了不同拉伸。 22 计算机图形学 2018/9/19 8.7 纹理映射 没有考虑曲面的弯曲为了填充曲面,纹理在 不同方向进行了不同拉伸。 1.计算机图形就是计算机生成的图片. 22

8.7 纹理映射 两步映射 首先把纹理映射到一个简单的中间曲面上 例如:映射到圆柱上 然后从中间对象到实际对象的映射。 23 计算机图形学 2018/9/19 8.7 纹理映射 两步映射 首先把纹理映射到一个简单的中间曲面上 例如:映射到圆柱上 然后从中间对象到实际对象的映射。 1.计算机图形就是计算机生成的图片. 23

8.7 纹理映射 圆柱映射 高为h,半径为r圆柱的参数方程是 映射函数: 从纹理坐标到圆柱面上没有变形。 适合于构造与无底的圆柱面拓朴同构 计算机图形学 2018/9/19 8.7 纹理映射 圆柱映射 高为h,半径为r圆柱的参数方程是 x = r cos(2πu) y = r sin(2πu) , 0 ≤ u,v≤ 1 z = v/h 映射函数: s = u t = v 从纹理坐标到圆柱面上没有变形。 适合于构造与无底的圆柱面拓朴同构 的曲面上的纹理。 1.计算机图形就是计算机生成的图片. 24

计算机图形学 2018/9/19 8.7 纹理映射 1.计算机图形就是计算机生成的图片. 25

计算机图形学 2018/9/19 8.7 纹理映射 1.计算机图形就是计算机生成的图片. 26

8.7 纹理映射 球面映射 半径为r的球的参数方程 类似于地图绘制中的映射肯定有变形。 常用在环境映射中。 x = r cos(2πu) 计算机图形学 2018/9/19 8.7 纹理映射 球面映射 半径为r的球的参数方程 x = r cos(2πu) y = r sin(2πu)cos(2πv), 0 ≤ u,v≤ 1 z = r sin(2πu)sin(2πv) 类似于地图绘制中的映射肯定有变形。 常用在环境映射中。 1.计算机图形就是计算机生成的图片. 27

8.7 纹理映射 立方体映射适合应用于正交投影中,也用 在环境映射中。 28 计算机图形学 2018/9/19 8.7 纹理映射 立方体映射适合应用于正交投影中,也用 在环境映射中。 1.计算机图形就是计算机生成的图片. 28

第八章 离散技术 8.6 映射方法 8.7 纹理映射 8.8 OpenGL中的纹理映射 8.9 纹理生成 29 计算机图形学 2018/9/19 第八章 离散技术 8.6 映射方法 8.7 纹理映射 8.8 OpenGL中的纹理映射 8.9 纹理生成 1.计算机图形就是计算机生成的图片. 29

计算机图形学 2018/9/19 8.8 OpenGL中的纹理映射 1.计算机图形就是计算机生成的图片. 30

8.8 OpenGL中的纹理映射 应用纹理步骤如下: 指定纹理 读入或生成图像 给每个顶点赋纹理坐标。 由应用程序建立适当的映射函数 计算机图形学 2018/9/19 8.8 OpenGL中的纹理映射 应用纹理步骤如下: 指定纹理 读入或生成图像 赋给纹理 激活纹理映射功能 给每个顶点赋纹理坐标。 由应用程序建立适当的映射函数 参数环绕(wrapping)、滤波(filtering) 1.计算机图形就是计算机生成的图片. 31

计算机图形学 2018/9/19 8.8 OpenGL中的纹理映射 纹理映射 1.计算机图形就是计算机生成的图片. 32

8.8 OpenGL中的纹理映射 纹理映射示例 纹理(下方)是 256 ×256 的图像, 它被映射到一个矩 形上,经透视投影 计算机图形学 2018/9/19 8.8 OpenGL中的纹理映射 纹理映射示例 纹理(下方)是 256 ×256 的图像, 它被映射到一个矩 形上,经透视投影 后的结果显示在上 方。 1.计算机图形就是计算机生成的图片. 33

8.8 OpenGL中的纹理映射 纹理映射与OpenGL流水线 图像与几何对象分别经过不同的流水线,在 计算机图形学 2018/9/19 8.8 OpenGL中的纹理映射 纹理映射与OpenGL流水线 图像与几何对象分别经过不同的流水线,在 片段处理时合二为一,“复杂的”纹理并不影响几 何的复杂性。 1.计算机图形就是计算机生成的图片. 34

8.8 OpenGL中的纹理映射 指定纹理图像 利用CPU内存中的纹理元素数组定义纹理图像 计算机图形学 2018/9/19 8.8 OpenGL中的纹理映射 指定纹理图像 利用CPU内存中的纹理元素数组定义纹理图像 GLubyte my_texels[512][512]; 定义纹理图像所用的像素图 扫描图像 由应用程序代码创建 激活纹理映射 glEnable(GL_TEXTURE_2D); 1.计算机图形就是计算机生成的图片. 35

8.8 OpenGL中的纹理映射 glTexImage2D(target,level,iformat,w,h, 计算机图形学 2018/9/19 8.8 OpenGL中的纹理映射 glTexImage2D(target,level,iformat,w,h, border,format,type,texels); target:纹理的类型,如GL_TEXTURE_2D 。 level:用于mipmapping,0表示单分辨率纹理图像。 iformat:纹素的分量格式,GL_RGB,GL_RGBA等。 width和height:pixels的宽度和高度,2m+ 2b,b为边框宽。 border:边框宽度,0(没有边框)或1 。 format:图像数据pixels的格式,GL_RGB,GL_RGBA等。 type:pixels分量的数据类型,GL_BYTE, GL_INT等。 pixels:指向纹素数组的指针,描述纹理图像及边框。 1.计算机图形就是计算机生成的图片. 36

计算机图形学 2018/9/19 8.8 OpenGL中的纹理映射 转化纹理图像 glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,512,512,0, GL_RGB,GL_UNSIGNED_BYTE,my_texels); OpenGL需要纹理的尺寸(不包括可选的边框宽度)为2的幂次 (OpenGL2.0以上无此限制),如果不是2的幂次,可用下述函数进行转化: int gluScaleImage(GLenum format, GLint widthin, GLint heightin,GLenum typein, const void *datain, GLint widthout, GLint heightout, GLenum typeout, void *dataout); datain源图像 dataout目标图像 当放缩时图像被插值和滤波 1.计算机图形就是计算机生成的图片. 37

8.8 OpenGL中的纹理映射 映射纹理 基于参数纹理坐标,是状态量,内部表示为四维 计算机图形学 2018/9/19 8.8 OpenGL中的纹理映射 映射纹理 基于参数纹理坐标,是状态量,内部表示为四维 (s,t,r,q)。取值于[0,1],维数小于4时,默认有t=r=0, q=1, glTexCoord*()指定每个顶点对应的纹理坐标。 1.计算机图形就是计算机生成的图片. 38

8.8 OpenGL中的纹理映射 典型代码 glBegin(GL_POLYGON); 计算机图形学 2018/9/19 8.8 OpenGL中的纹理映射 典型代码 glBegin(GL_POLYGON); glColor3f(r0, g0, b0); // if no shading used glNormal3f(u0, v0, w0); // if shading used glTexCoord2f(s0, t0); glVertex3f(x0, y0, z0); glColor3f(r1, g1, b1); glNormal3f(u1, v1, w1); glTexCoord2f(s1, t1); glVertex3f(x1, y1, z1); . glEnd(); 1.计算机图形就是计算机生成的图片. 39

8.8 OpenGL中的纹理映射 OpenGL应用双线性插值从给定的纹理坐标中 求出适当的纹素。 可以只应用纹理的一部分方法是只应用纹理 计算机图形学 2018/9/19 8.8 OpenGL中的纹理映射 OpenGL应用双线性插值从给定的纹理坐标中 求出适当的纹素。 可以只应用纹理的一部分方法是只应用纹理 坐标的一部分,如最大纹理坐标为(0.5,0.5)。 1.计算机图形就是计算机生成的图片. 40

8.8 OpenGL中的纹理映射 对于四边形,从纹理坐标到顶点的对应是比较 直接的。 对于一般的多边形,程序员必须决定如何给顶 计算机图形学 2018/9/19 8.8 OpenGL中的纹理映射 对于四边形,从纹理坐标到顶点的对应是比较 直接的。 对于一般的多边形,程序员必须决定如何给顶 点赋纹理坐标可能会出现变形。 1.计算机图形就是计算机生成的图片. 41

8.8 OpenGL中的纹理映射 OpenGL中有许多参数来确定纹理的应用方式wrapping。 计算机图形学 2018/9/19 8.8 OpenGL中的纹理映射 OpenGL中有许多参数来确定纹理的应用方式wrapping。 参数确定当s、t的值超出[0,1]区间后的处理方法。 filter模式允许用区域平均方法来代替点采样方法。 mimmapping技术使得能以不同的分辨率应用纹理 环境参数确定纹理映射与明暗处理的交互作用。 1.计算机图形就是计算机生成的图片. 42

8.8 OpenGL中的纹理映射 Wrapping模式 钳位(截断)模式: 若s,t>1就取1,若s,t<0就取0 计算机图形学 2018/9/19 8.8 OpenGL中的纹理映射 Wrapping模式 钳位(截断)模式: 若s,t>1就取1,若s,t<0就取0 重复:应用s,t模1的值 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP) GL_TEXTURE_WRAP_T, GL_REPEAT) 1.计算机图形就是计算机生成的图片. 43

8.8 OpenGL中的纹理映射 纹理的放大和缩小 放大:多个像素覆盖一个纹素 缩小:多个纹素覆盖一个像素 44 计算机图形学 2018/9/19 8.8 OpenGL中的纹理映射 纹理的放大和缩小 放大:多个像素覆盖一个纹素 缩小:多个纹素覆盖一个像素 1.计算机图形就是计算机生成的图片. 44

8.8 OpenGL中的纹理映射 点采样:最近纹素的纹理值。 线性滤波:最近点邻域(2 x 2)纹素加权平均的纹理值。 45 计算机图形学 2018/9/19 8.8 OpenGL中的纹理映射 点采样:最近纹素的纹理值。 线性滤波:最近点邻域(2 x 2)纹素加权平均的纹理值。 1.计算机图形就是计算机生成的图片. 45

8.8 OpenGL中的纹理映射 滤波模式的指定 glTexParameteri(target, type, mode) 计算机图形学 2018/9/19 8.8 OpenGL中的纹理映射 滤波模式的指定 glTexParameteri(target, type, mode) glTexParameteri(GL_TEXTURE_2D, GL_TEXURE_MAG_FILTER, GL_NEAREST); GL_TEXURE_MIN_FILTER, GL_LINEAR); 线性滤波需要一个额外的纹素边框来在边界 处进行滤波,即border = 1。 1.计算机图形就是计算机生成的图片. 46

8.8 OpenGL中的纹理映射 Mipmap对纹理位图进行预先滤波,降低分辨率。 可以减小对于非常小的要加纹理的对象的插值误差。 计算机图形学 2018/9/19 8.8 OpenGL中的纹理映射 Mipmap对纹理位图进行预先滤波,降低分辨率。 可以减小对于非常小的要加纹理的对象的插值误差。 在纹理定义时声明mipmap的层次, level=0,1,… glTexImage2D( GL_TEXTURE_2D, level, width, height,… ) 1.计算机图形就是计算机生成的图片. 47

8.8 OpenGL中的纹理映射 GLubyte image0[64][64][3]; GLubyte image1[32][32][3]; 计算机图形学 2018/9/19 8.8 OpenGL中的纹理映射 GLubyte image0[64][64][3]; GLubyte image1[32][32][3]; … GLubyte image5[1][1][3]; glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 64, 64, GL_RGB, GL_UNSIGNED_BYTE, image0); glTexImage2D(GL_TEXTURE_2D, 5, GL_RGB, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, image5); glTexParameteri(GL_TEXTURE_2D, GL_TEXURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST); 1.计算机图形就是计算机生成的图片. 48

8.8 OpenGL中的纹理映射 有无mipmap的对比 无mipmap 有mipmap 49 计算机图形学 2018/9/19 1.计算机图形就是计算机生成的图片. 无mipmap 有mipmap 49

8.8 OpenGL中的纹理映射 自动生成mipmap GLU中提供了mipmap建立界面,可以从给定图 像建立起所有的mipmap纹理 计算机图形学 2018/9/19 8.8 OpenGL中的纹理映射 自动生成mipmap GLU中提供了mipmap建立界面,可以从给定图 像建立起所有的mipmap纹理 gluBuild2DMipmaps(…) 缩小滤波器参数: GL_NEAREST_MIPMAP_NEAREST GL_NEAREST_MIPMAP_LINEAR GL_LINEAR_MIPMAP_NEAREST GL_LINEAR_MIPMAP_LINEAR 1.计算机图形就是计算机生成的图片. 50

8.8 OpenGL中的纹理映射 示例 线性滤波 点采样 mipmapped 后的点取样 mipmapped 的线性滤波 51 计算机图形学 2018/9/19 8.8 OpenGL中的纹理映射 示例 线性滤波 点采样 mipmapped 后的点取样 1.计算机图形就是计算机生成的图片. mipmapped 的线性滤波 51

8.8 OpenGL中的纹理映射 控制纹素和片段颜色如何融合 glTexEnv{fi}[v](GL_TEXTURE_ENV, 计算机图形学 2018/9/19 8.8 OpenGL中的纹理映射 控制纹素和片段颜色如何融合 glTexEnv{fi}[v](GL_TEXTURE_ENV, mode, param); GL_TEXTURE_ENV_MODE 设置模式 GL_MODULATE: 与计算的明暗效果调制在一起 GL_BLEND: 与环境颜色融合在一起 GL_REPLACE: 只应用纹理的颜色 GL_DECAL: 与GL_REPLACE类似 应用GL_TEXTURE_ENV_COLOR设置融合颜色 1.计算机图形就是计算机生成的图片. 52

8.8 OpenGL中的纹理映射 透视校正提示 纹理坐标与颜色插值要么是关于屏幕空间线性确定的, 或者要应用深度/透视值(较慢) 。 计算机图形学 2018/9/19 8.8 OpenGL中的纹理映射 透视校正提示 纹理坐标与颜色插值要么是关于屏幕空间线性确定的, 或者要应用深度/透视值(较慢) 。 在多边形边界上,走样现象非常明显。 glHint(GL_PERSPECTIVE_CORRECTION_HINT, hint) 其中hint可取值 GL_DONT_CARE, GL_NICEST, GL_FASTEST 1.计算机图形就是计算机生成的图片. 53

8.8 OpenGL中的纹理映射 自动生成纹理坐标 OpenGL能自动生成纹理坐标coord: 纹理坐标, 计算机图形学 2018/9/19 8.8 OpenGL中的纹理映射 自动生成纹理坐标 OpenGL能自动生成纹理坐标coord: 纹理坐标, 可取GL_S, GL_T, GL_R, 或GL_Q pname: 纹理坐标的生成函数,取 GL_TEXTURE_GEN_MODE GL_OBJECT_PLANE, GL_EYE_PLANE param:当pname为 GL_TEXTURE_GEN_MODE时, 取GL_OBJECT_LINEAR GL_EYE_LINEAR GL_SPHERE_MAP:用于环境映射 否则应为数组,由纹理生成平面的系数组成 1.计算机图形就是计算机生成的图片. 54

8.8 OpenGL中的纹理映射 自动生成纹理坐标(续) 计算机图形学 2018/9/19 8.8 OpenGL中的纹理映射 自动生成纹理坐标(续) 指定平面a x + b y + c z + d w = 0根据顶点(x,y,z,w)到 平面的距离生成纹理坐标(s,t),由于ax+by+cz+dw与该距离成 比例,有 s = asx + bsy + csz + dsw t = atx + bty + ctz + dtw GLfloat planes[]={0.5,0.0,0.0,0.5}; /* s=x/2+1/2 */ GLfloat planes[]={0.0,0.5,0.0,0.5}; /* t=y/2+1/2 */ glTexGeni(GL_S,GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); glTexGeni(GL_T,GL_TEXTURE_GEN_MODE,GL_OBJECT_LINEAR); glTexGenfv(GL_S, GL_OBJECT_LINEAR, planes); glTexGenfv(GL_T, GL_OBJECT_LINEAR, planes); glEnable(GL_TEXTURE_GEN_S); glEnable(GL_TEXTURE_GEN_T); 1.计算机图形就是计算机生成的图片. 55

8.8 OpenGL中的纹理映射 纹理对象 纹理也是状态的一部分,每类纹理(指1D,2D,3D) 计算机图形学 2018/9/19 8.8 OpenGL中的纹理映射 纹理对象 纹理也是状态的一部分,每类纹理(指1D,2D,3D) 只有一个当前纹理,如果不同的对象具有不同的纹理, 那么OpenGL需要从处理器内存向纹理内存传送大量 数据。 最新版本的OpenGL提供了纹理对象功能每个纹理 对象是一个图像。 纹理内存可以保存多个纹理对象。 1.计算机图形就是计算机生成的图片. 56

8.8 OpenGL中的纹理映射 产生n个未使用的纹理对象名称。 检查一个纹理名称是否被使用。 计算机图形学 2018/9/19 8.8 OpenGL中的纹理映射 产生n个未使用的纹理对象名称。 void glGenTextures(GLsizei n, GLuint *textureNames); 检查一个纹理名称是否被使用。 GLboolean glIsTexture(GLuint textureName); 创建或切换纹理对象,target为GL_TEXTURE_2D等。 void glBindTexture(GLenum target, GLuint textureName); 删除纹理对象。 void glDeleteTextures(GLsizei n, const GLuint *textureNames); 1.计算机图形就是计算机生成的图片. 57

8.8 OpenGL中的纹理映射 纹理映射过程 应用纹理框架 在纹理对象中指定纹理 设置纹理滤波方式 设置纹理函数 设置纹理的wrap模式 计算机图形学 2018/9/19 8.8 OpenGL中的纹理映射 纹理映射过程 应用纹理框架 在纹理对象中指定纹理 设置纹理滤波方式 设置纹理函数 设置纹理的wrap模式 设置可选的透视校正提示 绑定纹理对象 激活纹理映射功能 为每个顶点指定纹理坐标 纹理坐标可以自动生成 1.计算机图形就是计算机生成的图片. 58

8.8 OpenGL中的纹理映射 多重纹理 通常一个几何对象上只有一个纹理,有许多渲 染效果需要多次应用纹理。 计算机图形学 2018/9/19 8.8 OpenGL中的纹理映射 多重纹理 通常一个几何对象上只有一个纹理,有许多渲 染效果需要多次应用纹理。 例:已有纹理的表面上有其它物体的阴影,此时需要给 阴影加上纹理。 多重纹理的工作流程 1.计算机图形就是计算机生成的图片. 59

8.8 OpenGL中的纹理映射 初始化时,定义了两个纹理对象object0和object1 计算机图形学 2018/9/19 8.8 OpenGL中的纹理映射 初始化时,定义了两个纹理对象object0和object1 glActiveTexture(GL_TEXTURE0); /* unit 0 */ glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, object0); glTexEnvironment(…); /* how to apply texture 0 */ glActiveTexture(GL_TEXTURE1); /* unit 1 */ glBindTexture(GL_TEXTURE_2D, object1); glTexEnvironment(…); /* how to apply texture 1 */ 每个纹理单元使用不同的纹理坐标 GLfloat point[3], s, t, ss, tt; glMultiTexCoord2f(GL_TEXTURE0, s, t); glMultiTexCoord2f(GL_TEXTURE1, ss, tt); glVertex3fv(point); 1.计算机图形就是计算机生成的图片. 60

第八章 离散技术 8.6 映射方法 8.7 纹理映射 8.8 OpenGL中的纹理映射 8.9 纹理生成 61 计算机图形学 2018/9/19 第八章 离散技术 8.6 映射方法 8.7 纹理映射 8.8 OpenGL中的纹理映射 8.9 纹理生成 1.计算机图形就是计算机生成的图片. 61

8.9 纹理生成 纹理的用处 不用生成大量的几何对象就可以为对象表面提供 复杂的特征信息。 高端图形系统可以实时地处理二维纹理映射。 计算机图形学 2018/9/19 8.9 纹理生成 纹理的用处 不用生成大量的几何对象就可以为对象表面提供 复杂的特征信息。 高端图形系统可以实时地处理二维纹理映射。 GPU中配有大量的纹理内存 纹理图案生成 二维纹理的缺陷 三维纹理 1.计算机图形就是计算机生成的图片. 62

第八章 离散技术 8.6 映射方法 8.7 纹理映射 8.8 OpenGL中的纹理映射 8.9 纹理生成 63 计算机图形学 2018/9/19 第八章 离散技术 8.6 映射方法 8.7 纹理映射 8.8 OpenGL中的纹理映射 8.9 纹理生成 1.计算机图形就是计算机生成的图片. 63