计算机图形学 Computer Graphics 高级图形绘制方法 —纹理及纹理映射.

Slides:



Advertisements
Similar presentations
新目标初中英语 七年级下册. Unit 8 I’d like some noodles. Section B Period Two.
Advertisements

簡單 GIF 製作 (1)Gifmake (2)PICASION.COM By Shark. Gifmake introduction(1) 1.You can create a picture. Just specify width and height in pixels, then you'll.
第七课:电脑和网络. 生词 上网 vs. 网上 我上网看天气预报。 今天早上看了网上的天气预报。 正式 zhèngshì (报告,会议,纪录) 他被这所学校正式录取 大桥已经落成,日内就可以正式通车 落伍 luòw ǔ 迟到 chídào 他怕迟到,六点就起床了.
台生vs.陸生— 生涯競爭力面面觀 主講人:吳正興
Directions: Print slides 2-7 single sided in color.
毒品的危害解析及戒癮治療 評估 主講人:楊主任觀護人.
(复习课) 光学复习.
5B 教材分析.
Chapter 3. Visual Appearance 视觉外观
第十章 真实感图形绘制 基本概念 简单光照模型 基于简单光照模型的多边形绘制.
Welcome Welcome to my class Welcome to my class!.
Euler’s method of construction of the Exponential function
Unit 4 I used to be afraid of the dark.
Module 5.
Ⅱ、从方框里选择合适的单词填空,使句子完整通顺。 [ size beef special large yet ]
Texture Mapping 靜宜大學資工系 蔡奇偉 副教授 2006.
真实感图形 授课教师: 单位:.
Population proportion and sample proportion
第六章 三维真实感物体显示技术 虚拟现实(Virtual Reality,简称VR)技术是一种逼真的模拟人在自然环境中视觉、听觉、运动等行为的人机界面技术。其目的是:不仅能够在多维空间仿真建模,而且能够帮助人们获取知识和形成新的概念,Mark Green给出了一个简明的虚拟现实应用系统模型,如图6.1所示。
3D Model Wan-Yu Chen NTUEE.
Chapter 2. The Graphics Rendering Pipeline 图形绘制流水线
Seam Carving for Content-Aware Image Resizing
不断变迁的闪存行业形势 Memory has changed, especially serial - from a low cost, low pin count, slow memory to an advanced, high performance memory solution to save.
第五讲 数据的分组、合并与转换.
Creating Animated Apps (I) 靜宜大學資管系 楊子青
第十章 基于立体视觉的深度估计.
第二章 共轴球面系统的物像关系 Chapter 2: Object-image relations of coaxial spheric system.
Chapter 10 Three-Dimensional Viewing (三维观察)
Fundamentals of Physics 8/e 27 - Circuit Theory
課務組 Curriculum Section
第八章 Illumination and Shading
如何製作 「保家舒」 堆肥 ,………………. 1 1.
创建型设计模式.
Short Version : 6. Work, Energy & Power 短版: 6. 功,能和功率
XBRL未來發展趨勢 2009年12月 For information on applying this template onto existing presentations, refer to the notes on slide 3 of this presentation. The Input.
Unit title: 假期 – Holiday
The expression and applications of topology on spatial data
3D Object Representations
Introduction to OpenGL (1)
第三章 基本觀念 電腦繪圖與動畫 (Computer Graphics & Animation) Object Data Image
Interval Estimation區間估計
重點 資料結構之選定會影響演算法 選擇對的資料結構讓您上天堂 程式.
纹理映射.
HTML & CSS.
Python memory management & Impact to memory-hungry application
ICG 2018 Fall Homework1 Guidance
磁共振原理的临床应用 福建医科大学附属第一医院影像科 方哲明.
客户服务 询盘惯例.
a. dream bigger b. live harder c. love deeper
21st Century Teaching & Learning
第三章 基本觀念 電腦繪圖與動畫 (Computer Graphics & Animation) Object Data Image
Chapter 9 (三维几何变换) To Discuss The Methods for Performing Geometric Transformations.
IBM SWG Overall Introduction
高性能计算与天文技术联合实验室 智能与计算学部 天津大学
Guide to a successful PowerPoint design – simple is best
Chapter 5 Attributes of Output Primitives (图元的属性)
3.5 Region Filling Region Filling is a process of “coloring in” a definite image area or region. 2019/4/19.
中国科学技术大学计算机系 陈香兰 2013Fall 第七讲 存储器管理 中国科学技术大学计算机系 陈香兰 2013Fall.
中央社新聞— <LTTC:台灣學生英語聽說提升 讀寫相對下降>
Inheritance -II.
An Efficient MSB Prediction-based Method for High-capacity Reversible Data Hiding in Encrypted Images 基于有效MSB预测的加密图像大容量可逆数据隐藏方法。 本文目的: 做到既有较高的藏量(1bpp),
磁共振原理的临床应用.
Create and Use the Authorization Objects in ABAP
动词不定式(6).
2012 程式設計比賽 Openfind 天使帝國 v2.0 (蓋亞的紋章).
怎樣把同一評估 給與在不同班級的學生 How to administer the Same assessment to students from Different classes and groups.
Principle and application of optical information technology
Gaussian Process Ruohua Shi Meeting
Climbing a Rock Wall 攀岩 选自《多维阅读第10级》.
When using opening and closing presentation slides, use the masterbrand logo at the correct size and in the right position. This slide meets both needs.
Presentation transcript:

计算机图形学 Computer Graphics 高级图形绘制方法 —纹理及纹理映射

纹理及纹理映射 纹理映射 扰动纹理 环境映射

纹理及纹理映射 Image Mapping Environment Mapping Bump Mapping

纹理 纹理(texture)通常指物体的表面细节

纹理映射 纹理映射技术的本质 定义表面上任意点属性的一种方式 漫反射率 镜面反射率 透明度 折射率 …

纹理映射 两类最常使用的纹理 颜色纹理:在光滑表面上产生花纹图案的效果 几何纹理:来使物体表面产生凹凸不平的效果

颜色纹理 确定表面上颜色纹理的两种方法 预先建立表面的纹理模型 纹理映射:建立表面上的每一点和一已知图像上的点的对应关系,取图像上相应点的颜色值作为表面上各点的颜色值

颜色纹理 采用景物表面的参数化表示来确立表面的纹理映射坐标,即可实现纹理图像在景物表面的映射 景物表面的参数化表示为f(u,v) 纹理图像表示为T(s,t) 建立景物表面参数空间(u,v)和纹理图像参数空间(s,t)之间的一一对应关系

颜色纹理 (a) 纹理空间 (b) 景物空间的曲面片 (c) 纹理映射后的曲面片

颜色纹理 颜色纹理映射的三个主要步骤: 1. 纹理函数定义 2. 映射函数定义 3. 纹理映射的实施

颜色纹理 实例:采用线性函数将规范化的栅格图案映射到位于第一象限的球面下半部分(π/4≤φ≤π/2) 四个角点: 映射函数:

颜色纹理 圆柱面映射: 圆柱面的参数方程 圆柱面上一点(x,y,z)的参数即纹理坐标

颜色纹理 球面映射 球面参数方程 球面上一点(x,y,z)的参数即纹理坐标

映射方式

三维纹理域的映射 二维纹理域,三维图形场景物体,二维纹理映射是一种非线性映射 纹理变形 不能保证纹理连续性 三维物体每一个点(x,y,z)均有一个纹理值t(x,y,z),那么物体空间就可以映射到一个三维纹理空间上了-三维纹理域映射

三维纹理映射 纹理空间定义在三维空间上,与物体空间是同维的 把场景中的物体变换到纹理空间的局部坐标系中去 通过物体空间坐标(x,y,z)来计算纹理坐标(u,v,w)

几何纹理 几何纹理方法-对物体表面几何性质作微小扰动,产生凹凸不平的细节效果,给物体表面图象加上一个粗糙的外观 物体表面上的每一个点P(u,v),都沿该点处的法向量方向位移F(u,v)个单位长度,新表面位置:

新表面法向量计算 通过对两个偏导数求叉积得到 F相对很小,忽略不计,有

几何纹理实现 扰动后的法向量单位化,用于计算曲面的明暗度,产生凹凸不平的几何纹理 F的偏导数的计算,可以用中心差分实现 几何纹理函数定义可以用统一的图案纹理记录 图案中较暗的颜色对应较小F值,较亮的颜色对应较大F值,把各象素的值一个二维数组记录下来,就是几何纹理统一表示

纹理映射例子 地板与墙都是经过二维图象纹理映射后的平面

从微软考题说起 将一张图象映到一张平面上 A B

建立一个映射关系F:A-> B 方法1:用F将A上的每个象素映射到B上。 方法2:对B上的每个象素反求A上的对应象素,将其属性映射到B上。

几何纹理 凹凸映射(bump mapping) 法向映射(normal mapping) 在不改变物体宏观几何的前提下,模拟物体表面粗糙的、褶皱的、凹凸不平的光照效果 法向映射(normal mapping) 利用法向纹理保证高质量的表面细节复现 位移映射(displacement mapping) 利用纹理改变物体表面上点的几何位置,获得很强的深度感和细节

几何纹理 法向映射(Normal mapping) 借助低精度模型和一个法向纹理,获得高精度模型的绘制效果 先计算高精度模型的法向,将其保存在法向纹理中,再将法向纹理映射到低精度模型上进行光照计算

几何纹理 位移映射(displacement mapping) 依据与表面上点所对应的纹理值,沿表面法向偏移该点的几何位置 能产生很强的深度感 自遮挡 自阴影 轮廓 计算代价大 与凹凸映射、法向映射相比

凹凸映射 方法 在应用光照明模型计算景物表面光亮度时,对景物表面法向进行微小的扰动 物体表面S由参数方程S=S(u,v) 表示 思想 在应用光照明模型计算景物表面光亮度时,对景物表面法向进行微小的扰动 方法 物体表面S由参数方程S=S(u,v) 表示 S上的任意一点(u,v)的法向n=Su×Sv 沿着表面S的法线方向叠加一个微小的扰动量P(u,v)定义了一张新的表面S’

凹凸映射 方法(cont.) 新表面的法向可用 n’=Su’×Sv’ 计算 在计算表面S的光亮度时,取新表面的法向量n’取代原光滑表面法向量n,生成物体表面的凹凸效果 扰动函数P(u,v)既可解析定义,也可通过二维图像定义

凹凸映射 示例

凹凸映射 示例

纹理反走样 纹理走样示例

纹理反走样 纹理走样原因

纹理反走样 常用纹理反走样方法 前置滤波方法 超采样方法 Mipmap方法

纹理反走样 前置滤波方法 确定屏幕像素P上可见的景物表面区域A 将区域A直接映射到纹理空间区域T 取区域T内的所有纹理像素颜色值的平均作为景物表面区域A的平均纹理颜色 代入光照明模型,计算出 像素P应显示的光亮度值 前置滤波

纹理反走样 前置滤波效果 走样 前置滤波

纹理反走样 超采样方法 将屏幕像素P的四个角点分别映射到纹理空间,得到四个纹理像素值

纹理反走样 超采样方法效果 走样 超采样

纹理反走样 Mipmap方法 MIP来源于 拉丁语“multum in parvo”,意为“many things in a small place” 目前应用最广的纹理反走样算法之一 通过预先计算并存贮原始 纹理图像的一组多分辨率 版本,能显著地节省纹理 反走样的计算量

Mipmap方法 预处理:生成一个由不同分辨率图像构成的纹理图像序列 从原始纹理图像出发,生成一个其分辨率为原始图像1/4的新的纹理图像版本 新版本中的每一个像素值取为原始图像中相对应的四个像素颜色值的平均 类似地基于所得到的新纹理图像版本生成一个更低分辨率的、尺寸更小的纹理图像版本 这一过程一直持续到最后生成的纹理图像仅包含一个像素为止

Mipmap方法 预处理

Mipmap方法 映射阶段 屏幕上的每一像素内的可见表面区域被映射到原始纹理图像上的一块区域 估计该区域所覆盖的原始纹理图像中像素的个数并以此作为选取适当分辨度的纹理图像版本的一种测度

Mipmap方法 映射阶段(cont.) 从预先构造的纹理图像序列中找出其压缩率最接近当前纹理像素与屏幕像素比率的两个纹理图像 在相邻分辨率的两纹理图像上计算当前屏幕像素映射点的纹理颜色值 根据两纹理图像对原始图像的压缩率在所得到的两个纹理颜色值间取加权平均,作为当前屏幕像素可见表面区域的颜色值

Mipmap方法 映射阶段(cont.)

Mipmap效果 无Mipmap 有Mipmap

纹理反走样效果对比

纹理映射实例程序 利用OpenGL实现纹理映射的三个主要步骤 生成纹理数据 将纹理数据载入纹理内存 将纹理数据映射到物体表面

纹理映射实例程序 讲解光盘中所附的程序 DEMO

纹理映射实例程序 Step1:生成纹理数据 void glInit (void) { … if (!loadTGA ("texture.tga", 13)) printf ("texture.tga not found!\n"); } int loadTGA (char *name, int id) unsigned char *imageData = NULL; …. imageData = (unsigned char*)getData (s, size, imageBits); /* no image data */ if (imageData == NULL) returnError (s, TGA_BAD_DATA);

纹理映射实例程序 Step2:将纹理数据载入纹理内存 int loadTGA (char *name, int id) { … glBindTexture (GL_TEXTURE_2D, id); glPixelStorei (GL_UNPACK_ALIGNMENT, 1); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); glTexImage2D (GL_TEXTURE_2D, 0, texFormat, imageWidth, imageHeight, 0, texFormat, GL_UNSIGNED_BYTE, imageData); ... }

纹理映射实例程序 Step3:将纹理数据映射到物体表面 void drawFace (void) { glEnable (GL_TEXTURE_2D); /* enable texture mapping */ glBindTexture (GL_TEXTURE_2D, 13); /* bind to our texture, has id of 13 */ … glBegin (GL_QUADS); glTexCoord2f (0.2f,0.2f); /* lower left corner of image */ glVertex3f (-10.0f, -10.0f, 0.0f); glTexCoord2f (0.6f, 0.2f); /* lower right corner of image */ glVertex3f (10.0f, -10.0f, 0.0f); glTexCoord2f (0.6f, 0.6f); /* upper right corner of image */ glVertex3f (10.0f, 10.0f, 0.0f); glTexCoord2f (0.2f, 0.6f); /* upper left corner of image */ glVertex3f (-10.0f, 10.0f, 0.0f); glEnd (); glDisable (GL_TEXTURE_2D); /* disable texture mapping */ }

纹理映射实例程序 结果

7.5 表面图案与纹理

7.5 表面图案与纹理 7.5.1 表面图案的描绘 将一幅平面图案描绘到物体表面上的过程如下: ⑴ 将平面图案上的各点(x, y)映射到物体表面的各点(x, y, z)。 ⑵ 求出点(x, y, z)处新的反射系数。 ⑶ 用光照模型计算物体表面点(x, y, z)的色彩明暗。

7.5 表面图案与纹理 对于目的四边形S内的任一点P,与在S内的对应点P的映射关系为: 两个凸多边形中的点的映射

7.5 表面图案与纹理 凸四边形S和S之间的位置映射算法如下: ⑴ 求S中的边的交点F、E,以及S中的边的交点F、E的位置。 ⑵ 对于目的多边形S中的每一个元素P,寻找S中对应位置P。 ① 求PF与AB的交点P1,由P1得f1/f2;求PE与BC的交点P2,由P2得e1/e2。 ② 由f1/f2=f1/f2得P1的位置,由e1/e2=e1/e2得P2的位置。 ③ 求P1 F 与P2E的交点,即为点P的位置。 ④ 取P的色彩,求得P点新的反射系数。

7.5 表面图案与纹理 对于边数大于4的多边形,可以用网格的办法将目的多边形S和源多边形S相互对应地划分为凸四边形网格。对于网格中的每个四边形施行上述变换。 凹多边形划分为多个凸四边形分别进行映射

7.5 表面图案与纹理 Blinn在1978年提出,用扰动物体表面法线方向的方法来模拟表面凹凸纹理的真实感显示效果。 7.5.2 表面纹理的描绘 Blinn在1978年提出,用扰动物体表面法线方向的方法来模拟表面凹凸纹理的真实感显示效果。 物体的新表面S(u, v)定义为 S(u, v)=Q(u, v)+P(u, v) 上式对u、v分别求偏导函数,得

7.5 表面图案与纹理 上式中第三项皆可忽略(由于P(u,v) 很小),即得 记NS为S(u, v)的法向量。法向量可以表示为两个偏导向量Su和Sv的叉积,即: NS = SuSv =

Environment Maps Environment Map Viewer Reflected ray Object

OpenGL纹理映射 Create texture objects Specify how the texture is applied 1D, 2D, 3D Specify what does texture contain: say, color, depth, etc. Specify how the texture is applied Replace, modulate, or blend Enable texture mapping Specify scene with both geometric coordinates as well as texture coordinates

指定纹理 glTexImage2D(target, level, internalformat, width, height, border, format, type, *texels); E.g.: target: GL_TEXTURE_2D Level : 0 (for no mip maps) Internalformat: GL_RGB Width,height: 2^m+2*b, 256 by 256 with b=0 Border b: 0 Format: GL_RGB Type: GL_INT texels: actual texture image

指定mipmap You need to specify the levels for which mipmapping is being used. You can also specify scale factor (between the texture image and size of polygon). You also need to supply images for all levels. You use glTexParameteri() and glTexImage2D() glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 2); glTexImage2D(..,2,…);

自动生成 mipmap If you have highest resolution image, OpenGL can generate low level prefiltered images automatically. gluBuild2DMipmaps() gluBuild2DMipmapsLevels() To build only a subset See book for detailed description of parameters

OpenGL 纹理过滤 We can specify the kind of filter to be applied OpenGL filtering is crude but fast Specify filter using glParameteri() with GL_TEXTURE_MAG_FILTER and GL_TEXTURE_MIN_FILTER E.g. filters : GL_NEAREST, GL_LINEAR, GL_NEAREST_MIPMAP_LINEAR (for minification) E.g. glParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);

其他函数 glGenTextures(); glBindTexture(); glEnable(GL_TEXTURE_2D); To generate unique names glBindTexture(); Creates if texture object not already created Activates the texture object if already created Pass 0 to stop using texture objects glEnable(GL_TEXTURE_2D); Enables texture mapping glTexCoord2i(texcoordinate);

调整表面属性 Instead of replacing color, you can also modulate color or some other property of polygon. glTexEnv(GL_TEXTURE_ENV, pname, param); Pname and param specfiy how texture affects surface E.g. glTexEnv(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE);

纹理的技巧 If the texture is not large enough to cover a polygon, you can tile it using the GL_REPEAT parameter glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); You can also clamp the texture (i.e., stretch the last pixel to cover everything)

纹理边界 You can control what happens if a point maps to a texture coordinate outside of the texture image All textures are assumed to go from (0,0) to (1,1) in texture space Repeat: Assume the texture is tiled glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT) Clamp: Clamp to Edge: the texture coordinates are truncated to valid values, and then used glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP) Can specify a special border color: glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, R,G,B,A)

重复边界 (1,1) (0,0)

固定边界 (1,1) (0,0)

边界颜色 (1,1) (0,0)

其他 Texture must be in fast memory - it is accessed for every pixel drawn If you exceed it, performance will degrade horribly There are functions for managing texture memory Skilled artists can pack textures for different objects into one map Texture memory is typically limited, so a range of functions are available to manage it Specifying texture coordinates can be annoying, so there are functions to automate it for specific shapes, say quadrics, NURBS.

其他 There is a 4x4 texture matrix: apply a matrix transformation to texture coordinates before indexing texture There are “image processing” operations that can be applied to the pixels coming out of the texture

环境映射 Environment Map Environment mapping produces reflections on shiny objects Texture is transferred in the direction of the reflected ray from the environment map onto the object Reflected ray: R=2(N·V)N-V Viewer Reflected ray Object

环境映射 We use the direction of the reflected ray to index a texture map. We can simulate reflections. This approach is not completely accurate. It assumes that all reflected rays begin from the same point, and that all objects in the scene are the same distance from that point.

凹凸贴图 Bump Mapping assumes that the Illumination model is applied at every pixel (as in Phong Shading or ray tracing). Swirly Bump Map Sphere w/Diffuse Texture & Bump Map Sphere w/Diffuse Texture

Thank You!