标題中的“PT”表示:Procedural Texture(過程紋理)。表示該章節屬于“過程紋理”的内容。
目前章節在“過程紋理”内容中的位置:
過程紋理(0)——概述
過程紋理(1)——方格紋理(1)——3D方格紋理
過程紋理(1)——方格紋理(2)——2D方格紋理(1)——平面2D方格紋理
過程紋理(1)——方格紋理(2)——2D方格紋理(2)——球面2D方格紋理
1,理論分析
平面2D方格紋理算法如下:
第一步:x、z坐标分别除以方格邊長;然後,分别求取floor();然後,将兩個結果相加;然後,将相加的結果對2取餘。
第二步:确定撞擊點是在方格的内部還是在條紋上。
對于球面2D方格紋理,和平面2D方格紋理算法差不多。隻不過是将x、z坐标換成了球面參數方程的參數theta、phi。當然,“方格”的“邊長”也就分别對應theta、phi兩個角度的“弧度片段”。
定義幾個參數:
算法後續部分則和平面2D方格紋理是一樣的了。
2,C++代碼實作
球面2D方格紋理對應的類為SphereChecker,基本和PlaneChecker相似,如下是兩者主要差異代碼的截圖:
3,測試圖形
3.1 測試代碼
截圖如下:
3.2 輸出圖形
将條紋寬度值設為0時,圖形是這樣:
4,其他說明
完整代碼下載下傳路徑:
http://download.csdn.net/detail/libing_zeng/9794115
Referrance:
[1]. Kevin Suffern, Ray Tracing from theGround Up, A K PetersLtd, 2007.