Q96:PT(1.2.3):圆柱2D方格纹理(Cylinder 2D Checker)

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方格纹理

1,理论分析

先看一下效果图吧:
这里写图片描述
从上图,我们可以看到,圆柱是由圆柱面和两个圆盘底面构成。圆柱面和圆盘的2D方格纹理算法是不同的。接下来,我们分别进行说明。

1.1 圆柱面2D方格纹理

关于圆柱面的两个参数:
水平方向:和球面一样,用的是phi
垂直方向:用的是撞击点P到底面的距离yyy。我们考虑的是圆柱的半径为1,上下底分别在y=-1,1的位置。所以,yyy=Py+1

定义几个参数:
这里写图片描述

这里写图片描述

1.2 圆盘2D方格纹理

关于圆盘的两个参数:
水平方向:和圆柱面一样,用的是phi
“垂直”方向:用的是撞击点P到圆心的距离rrr。我们考虑的是圆盘的半径为1。所以rrr=sqrt(Px*Px+Pz*Pz)。

关于程序中参数的定义:
水平方向:直接用圆柱面中phi相关的参数;
“垂直”方向:即半径方向,定义“num_radius_checkers_disk”(表示沿半径方向方格的个数);关于条纹的宽度,直接用圆柱面中垂直方向的那个条纹宽度。

这里写图片描述

2,C++代码实现

圆柱2D方格纹理对应的类为SolidCylinderChecker,和SphereChecker相似,如下是两者主要差异代码的截图:

这里写图片描述

这里写图片描述
这里写图片描述
这里写图片描述

3,测试图形

3.1 测试代码

这里写图片描述

3.2 输出图形

这里写图片描述

将条纹宽度设置为0时,是这样的图形:
这里写图片描述

4,其他说明

完整代码下载路径:http://download.csdn.net/detail/libing_zeng/9794265

Referrance:
[1]. Kevin Suffern, Ray Tracing from theGround Up, A K PetersLtd, 2007.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值