标题中的“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)相关推荐

  1. Q96:PT(3):基于噪声的纹理(Noise-Based Textures)(0)——概述

    标题中的"PT"表示:Procedural Texture(过程纹理).表示该章节属于"过程纹理"的内容. 当前章节在"过程纹理"内容中的位 ...

  2. Q96:过程纹理(Procedural Texture)(0)——概述

    后续章节标题中的"PT"表示:Procedural Texture(过程纹理).表示该章节属于"过程纹理"的内容. 我们知道纹理分为两种:映射纹理(mappin ...

  3. Q96:PT(3.1):基本的基于噪声的纹理(Basic Noise-Based Textures)

    标题中的"PT"表示:Procedural Texture(过程纹理).表示该章节属于"过程纹理"的内容. 当前章节在"过程纹理"内容中的位 ...

  4. Q96:PT(3.2):包裹的基于噪声的纹理(Wrapped Noise-Based Textures)

    标题中的"PT"表示:Procedural Texture(过程纹理).表示该章节属于"过程纹理"的内容. 当前章节在"过程纹理"内容中的位 ...

  5. Q96:PT(3.5):木纹纹理(Wood Texture)

    标题中的"PT"表示:Procedural Texture(过程纹理).表示该章节属于"过程纹理"的内容. 当前章节在"过程纹理"内容中的位 ...

  6. Q96:PT(3.4):砂岩纹理(Sandstone Texture)

    标题中的"PT"表示:Procedural Texture(过程纹理).表示该章节属于"过程纹理"的内容. 当前章节在"过程纹理"内容中的位 ...

  7. Q96:PT(3.3):大理石纹理(Marble Texture)

    标题中的"PT"表示:Procedural Texture(过程纹理).表示该章节属于"过程纹理"的内容. 当前章节在"过程纹理"内容中的位 ...

  8. OpenGL ES 详解纹理生成和纹理映射步骤以及函数

    通常一个纹理映射的步骤是: 创建纹理对象.就是获得一个新的纹理句柄 ID. 指定纹理.就是将数据赋值给 ID 的纹理对象,在这一步,图像数据正式加载到了 ID 的纹理对象中. 设定过滤器.定义了ope ...

  9. Android OpenGL ES 应用(二) 纹理

    上一篇讲了基础入门 OpenGL (一) ,这一次主要学习OpenGL 纹理基本学习总结 要是做复杂的OpenGL应用程序,一定会用到纹理技术.纹理说白了就是把图片或者视频图像绘制到OpenGL空间中 ...

最新文章

  1. java仿聊天室项目总结_Java团队课程设计-socket聊天室(Day4总结篇)
  2. linux pe大小,lvm中的pe默认是4M 最大能支持多大 1T?2T
  3. boa+php 嵌入式,boa 0.94.13 在嵌入式平台的安装与配置
  4. Confluence 6 企业环境或者网站托管的 Java 配置策略
  5. 反编译与计算机软件的知识产权保护
  6. WEB安全扫描器Netsparker推荐给大家
  7. 电压采集采样电路设计
  8. 查看电脑CPU是否支持虚拟化
  9. 程序员如何写项目经历
  10. 雷军和董明珠的10亿赌局 什么来历
  11. Cannot resolve MVC View
  12. 【POJ 2484】A Funny Game(对称博弈)
  13. rgb 与 #开头16进制 HEX颜色值关系转换,颜色值透明度的百分数对应十六进制表
  14. 浏览器打开exe程序
  15. 量子计算机应用于哪些领域,量子计算的应用领域
  16. 手把手教弟弟写了个扫雷demo,弟弟竟拿去跟大学同学装* 附(思路注释+源码)
  17. 让 Nginx 支持 WAF 防护功能web防火墙 - 沧海一粟 - Web系统架构与服务器运维,php开发...
  18. 一年级课程表(3月1日—3月4日)
  19. LayaBox怎么添加定时器
  20. Mac 下百度网盘如何进行加速? 使用Aria2GUI

热门文章

  1. POJ 3080 - Blue Jeans
  2. 手把手教你如何把本地文件传到服务器,如何映射
  3. 古老的txt下传和txt上载
  4. Codeforces 837 简要题解
  5. LightOJ1245 Harmonic Number (II) —— 规律
  6. 洛谷P1589 泥泞路
  7. jQuery 第八课 —— 数据交互的升级
  8. eclipse maven 插件的安装和配置
  9. 挑战练习题2.3动态规划 poj3046 Ant Counting dp
  10. Putty server refused our key的解决方法