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