天天看點

Q96:PT(1.2.2):球面2D方格紋理(Sphere 2D Checker)1,理論分析2,C++代碼實作3,測試圖形4,其他說明

标題中的“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兩個角度的“弧度片段”。

定義幾個參數:

Q96:PT(1.2.2):球面2D方格紋理(Sphere 2D Checker)1,理論分析2,C++代碼實作3,測試圖形4,其他說明

算法後續部分則和平面2D方格紋理是一樣的了。

Q96:PT(1.2.2):球面2D方格紋理(Sphere 2D Checker)1,理論分析2,C++代碼實作3,測試圖形4,其他說明
Q96:PT(1.2.2):球面2D方格紋理(Sphere 2D Checker)1,理論分析2,C++代碼實作3,測試圖形4,其他說明

2,C++代碼實作

球面2D方格紋理對應的類為SphereChecker,基本和PlaneChecker相似,如下是兩者主要差異代碼的截圖:

Q96:PT(1.2.2):球面2D方格紋理(Sphere 2D Checker)1,理論分析2,C++代碼實作3,測試圖形4,其他說明
Q96:PT(1.2.2):球面2D方格紋理(Sphere 2D Checker)1,理論分析2,C++代碼實作3,測試圖形4,其他說明
Q96:PT(1.2.2):球面2D方格紋理(Sphere 2D Checker)1,理論分析2,C++代碼實作3,測試圖形4,其他說明

3,測試圖形

3.1 測試代碼

截圖如下:

Q96:PT(1.2.2):球面2D方格紋理(Sphere 2D Checker)1,理論分析2,C++代碼實作3,測試圖形4,其他說明

3.2 輸出圖形

Q96:PT(1.2.2):球面2D方格紋理(Sphere 2D Checker)1,理論分析2,C++代碼實作3,測試圖形4,其他說明

将條紋寬度值設為0時,圖形是這樣:

Q96:PT(1.2.2):球面2D方格紋理(Sphere 2D Checker)1,理論分析2,C++代碼實作3,測試圖形4,其他說明

4,其他說明

完整代碼下載下傳路徑:

http://download.csdn.net/detail/libing_zeng/9794115

Referrance:

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

繼續閱讀