添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
风流倜傥的灭火器  ·  用 DynamoDB ...·  3 周前    · 
英勇无比的红茶  ·  Python + Selenium + ...·  1 年前    · 
稳重的小马驹  ·  Surface ...·  1 年前    · 

标题中的“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.

一方面,我们想要将R=3球面这套纹理添加到小半径的球面上;另一方面,我们希望在将这套纹理添加到小半径球面上时,能够对纹理进行相应的缩小,以便纹理在小半径球面上的效果和R=3球面上的效果一样。换句话说,若半径缩小到原来的三分之一变成了R=1,R=3这套纹理也要缩小到原来的三分之一,以便适合R=1的球面。
仿射变换 ,又称 仿射 映射。对图像的坐标向量进行一次线性变换和平移。特点是变换前后图像保持平直性(直线变换后任然是直线)和平行性(平行线变换后任然是平行线)。也就是二维平面上点的相对位置保持不变。 常见的 仿射变换 有: 平移 (translation) 翻转(flip) 缩放 (scale) 旋转 (rotation) 错切 (shear) 这些变换都是 仿射变换 的特色情况, 仿射变换 还可以产生许多...
/* 定义顶点的次序是大写的反N字形,这样根据绘制三角形规则刚好构成矩形 */ float vertices[] = { -1.0f, 1.0f, 1.0, 0, 0, //0左上 -1.0f, -1.0f, 1.0, 0, 1, //1左下 1.0f, 1.0f, 1.0, 1, 0, //2右上 1.0f, -1.0f, 1.0, 1, 1, //3右下
“砂岩 纹理 ”和“大理石 纹理 ”基本是一样的。两者差异的地方: 1,“砂岩 纹理 ”对应的“颜色带”来自真实砂岩的照片,所以“砂岩 纹理 ”看起来更为逼真; 2,我们知道砂岩是沉积岩,所以 纹理 非常平整,所以我们需要将噪声系数perturbation设置得非常小(一般都是0.1左右)。 基于“大理石 纹理 ”章节的代码,只需改动两处: 1,将“颜色带”图片换成“砂岩 纹理 ”的; 2,将噪声系数设置成很小的正实数。
ERROR: Cannot unpack file c:\users\86133\appdata\local\temp\pip-unpack-0 q96 hr\simple.html (downloaded from c:\users\86133\appdata\local\temp\pip-req-build-x1pfz2, content-type: text/html); cannot detect archive format ERROR: Cannot determine archive format of c:\users\86133\appdata\local\temp\pip-req-build-x1pfz2