标题中的“PT”表示:Procedural Texture(过程纹理)。表示该章节属于“过程纹理”的内容。
当前章节在“过程纹理”内容中的位置:
过程纹理(0)——概述
过程纹理(1)——方格纹理(1)——3D方格纹理
过程纹理(1)——方格纹理(2)——2D方格纹理(1)——平面2D方格纹理
过程纹理(1)——方格纹理(2)——2D方格纹理(2)——球面2D方格纹理
过程纹理(1)——方格纹理(2)——2D方格纹理(3)——圆柱2D方格纹理
过程纹理(2)——纹理的仿射变换
过程纹理(3)——基于噪声的纹理(0)——概述
过程纹理(3)——基于噪声的纹理(1)——Basic Noise Texture
过程纹理(3)——基于噪声的纹理(2)——Wrapped Noise Texture
过程纹理(3)——基于噪声的纹理(3)——Marble Texture
1,理论介绍
前面学习过的噪声纹理,都是在某固定颜色上添加纹理,以便得到该固定颜色的深浅不同的颜色分布。我们现在学习的大理石纹理,则是引入“颜色带(color ramp)”,如下:
当撞击点遍历整个物体时,撞击点对应的颜色值怎么从“颜色带”上重复轮转地取得呢?
根据撞击点的y坐标值设计怎么一个函数:
u = [1+sin(y)]/2 “式子1”
该函数的函数图形如下:
这样一来,从颜色带中取颜色的过程是严格依次按照y值的变化而重复轮转的。当然,我们现在是在学习噪声纹理,肯定得在这里面加点噪声。设计如下函数加入噪声:
p.y=p.y+a*noise(p) “式子2”
也就是在撞击点的y坐标上添加噪声,其中a是噪声的缩放系数。
这样一来,从颜色带中取颜色的过程则不是严格依次按照y值的变化而重复轮转的,而是“跳跃”着在颜色带上取颜色。
2,C++代码实现
定义一个新的类FBmTextureRamp。相关代码截图如下:
3,测试图形
3.1 测试代码
3.2 输出图形
求和项数6,求和幅值0. 5,求和频率2;噪声缩放系数为0(即没有噪声)
求和项数6,求和幅值0. 5,求和频率2;噪声缩放系数为0(即没有噪声)
对纹理进行仿射变换:
it_ptr->rotate_x(-60);
it_ptr->rotate_y(-60);
求和项数6,求和幅值0. 5,求和频率2;噪声缩放系数为0(即没有噪声)
对纹理进行仿射变换:
it_ptr->scale(0.2);
it_ptr->rotate_x(-60);
it_ptr->rotate_y(-60);
这里对纹理进行仿射变换,主要是为了看看纹理缩放后的图形效果。将纹理缩小到原来的五分之一时:原纹理对应图形上是只有一条蓝色带,而缩小到五分之一的纹理对应的图形上则有五条蓝色带。这也说明:在没有噪声的情况下,在颜色带上取颜色的过程是严格依次轮转的。
求和项数6,求和幅值0. 5,求和频率2;噪声缩放系数为0(即没有噪声)
对纹理进行仿射变换:
it_ptr->scale(0.1);
it_ptr->rotate_x(-60);
it_ptr->rotate_y(-60);
纹理缩小到原来的十分之一,图形上则有十条蓝色带。
求和项数6,求和幅值0. 5,求和频率2;噪声缩放系数为4
求和项数6,求和幅值0. 5,求和频率2;噪声缩放系数为8
4,其他说明
完整代码下载路径:http://download.csdn.net/detail/libing_zeng/9798309
Referrance:
[1]. Kevin Suffern, Ray Tracing from theGround Up, A K PetersLtd, 2007.