Q96:PT(2):纹理的仿射变换(Textures And Transformations)
标题中的“PT”表示:Procedural Texture(过程纹理)。表示该章节属于“过程纹理”的内容。
当前章节在“过程纹理”内容中的位置:
过程纹理(0)——概述
过程纹理(1)——方格纹理(1)——3D方格纹理
过程纹理(1)——方格纹理(2)——2D方格纹理(1)——平面2D方格纹理
过程纹理(1)——方格纹理(2)——2D方格纹理(2)——球面2D方格纹理
过程纹理(1)——方格纹理(2)——2D方格纹理(3)——圆柱2D方格纹理
过程纹理(2)——纹理的仿射变换
1,理论分析
特别声明:可以对所有的纹理进行仿射变换,但是我们是以3D方格纹理来学习纹理的仿射变换的。
为什么要对纹理进行仿射变换?
我们先看一组图:
假设,我们要对所有半径的球面添加类似于R=3的3D方格纹理。当我们将R=3球面上的这套纹理直接添加到R=2、R=1、R=0.5的球面上时(效果如上图),这套纹理对于这些小半径球面来说,明显是“太大”了。这个效果并不是我们想要的。
我们想要的是下面这种效果:
一方面,我们想要将R=3球面这套纹理添加到小半径的球面上;另一方面,我们希望在将这套纹理添加到小半径球面上时,能够对纹理进行相应的缩小,以便纹理在小半径球面上的效果和R=3球面上的效果一样。换句话说,若半径缩小到原来的三分之一变成了R=1,R=3这套纹理也要缩小到原来的三分之一,以便适合R=1的球面。
怎么对纹理进行缩小变换呢?
接下来,我们抽取纹理中的四个方格来进行说明。
现在问题清晰了:若要对纹理进行某种仿射变换,只需要对用于计算纹理的撞击点的坐标值进行相反的变换即可。
更具体地说,由纹理的仿射变换得到相应的逆变换矩阵,然后用这个逆变换矩阵乘以撞击点坐标值得到新坐标值,然后根据新坐标值计算得到的就是进行仿射变换之后的纹理。
2,C++代码实现
像几何物体的仿射变换一样,我们定义一个“实例类InstanceTexture”。只不过Instance作用的是集合物体,InstanceTexture作用的是纹理。
之前Instance学习的链接:http://blog.csdn.net/libing_zeng/article/details/60160279
部分代码截图如下:
3,测试图形
3.1 测试代码
3.2 输出图形
R=3:it_ptr->scale(1.0)
R=2:it_ptr->scale(1.0/1.5)
R=1:it_ptr->scale(1.0/3)
R=0.5:it_ptr->scale(1.0/6)
4,其他说明
完整代码下载路径:http://download.csdn.net/detail/libing_zeng/9797145
Referrance:
[1]. Kevin Suffern, Ray Tracing from theGround Up, A K PetersLtd, 2007.
Q96:PT(2):纹理的仿射变换(Textures And Transformations)相关推荐
- Q96:PT(3):基于噪声的纹理(Noise-Based Textures)(0)——概述
标题中的"PT"表示:Procedural Texture(过程纹理).表示该章节属于"过程纹理"的内容. 当前章节在"过程纹理"内容中的位 ...
- Q96:过程纹理(Procedural Texture)(0)——概述
后续章节标题中的"PT"表示:Procedural Texture(过程纹理).表示该章节属于"过程纹理"的内容. 我们知道纹理分为两种:映射纹理(mappin ...
- Q96:PT(3.1):基本的基于噪声的纹理(Basic Noise-Based Textures)
标题中的"PT"表示:Procedural Texture(过程纹理).表示该章节属于"过程纹理"的内容. 当前章节在"过程纹理"内容中的位 ...
- Q96:PT(3.2):包裹的基于噪声的纹理(Wrapped Noise-Based Textures)
标题中的"PT"表示:Procedural Texture(过程纹理).表示该章节属于"过程纹理"的内容. 当前章节在"过程纹理"内容中的位 ...
- Q96:PT(3.5):木纹纹理(Wood Texture)
标题中的"PT"表示:Procedural Texture(过程纹理).表示该章节属于"过程纹理"的内容. 当前章节在"过程纹理"内容中的位 ...
- Q96:PT(3.4):砂岩纹理(Sandstone Texture)
标题中的"PT"表示:Procedural Texture(过程纹理).表示该章节属于"过程纹理"的内容. 当前章节在"过程纹理"内容中的位 ...
- Q96:PT(3.3):大理石纹理(Marble Texture)
标题中的"PT"表示:Procedural Texture(过程纹理).表示该章节属于"过程纹理"的内容. 当前章节在"过程纹理"内容中的位 ...
- OpenGL ES 详解纹理生成和纹理映射步骤以及函数
通常一个纹理映射的步骤是: 创建纹理对象.就是获得一个新的纹理句柄 ID. 指定纹理.就是将数据赋值给 ID 的纹理对象,在这一步,图像数据正式加载到了 ID 的纹理对象中. 设定过滤器.定义了ope ...
- Android OpenGL ES 应用(二) 纹理
上一篇讲了基础入门 OpenGL (一) ,这一次主要学习OpenGL 纹理基本学习总结 要是做复杂的OpenGL应用程序,一定会用到纹理技术.纹理说白了就是把图片或者视频图像绘制到OpenGL空间中 ...
最新文章
- java仿聊天室项目总结_Java团队课程设计-socket聊天室(Day4总结篇)
- linux pe大小,lvm中的pe默认是4M 最大能支持多大 1T?2T
- boa+php 嵌入式,boa 0.94.13 在嵌入式平台的安装与配置
- Confluence 6 企业环境或者网站托管的 Java 配置策略
- 反编译与计算机软件的知识产权保护
- WEB安全扫描器Netsparker推荐给大家
- 电压采集采样电路设计
- 查看电脑CPU是否支持虚拟化
- 程序员如何写项目经历
- 雷军和董明珠的10亿赌局 什么来历
- Cannot resolve MVC View
- 【POJ 2484】A Funny Game(对称博弈)
- rgb 与 #开头16进制 HEX颜色值关系转换,颜色值透明度的百分数对应十六进制表
- 浏览器打开exe程序
- 量子计算机应用于哪些领域,量子计算的应用领域
- 手把手教弟弟写了个扫雷demo,弟弟竟拿去跟大学同学装* 附(思路注释+源码)
- 让 Nginx 支持 WAF 防护功能web防火墙 - 沧海一粟 - Web系统架构与服务器运维,php开发...
- 一年级课程表(3月1日—3月4日)
- LayaBox怎么添加定时器
- Mac 下百度网盘如何进行加速? 使用Aria2GUI