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

198 篇文章 12 订阅
195 篇文章 27 订阅

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

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值