他的程式檔有兩個:
volumeRender.cu
主程式、資料讀取和 OpenGL 等相關的部分。
volumeRender_kernel.cu
實際做 ray casting 的 CUDA kernel。
在 volumeRender.cu 中的 function 列表如下:
| main | main function。 |
| loadRawFile | 用來讀取 Volume data 的函式。 在這個範例中,Volume 的資料是用 3D 的 RAW 檔來儲的。 |
| initPixelBuffer | 建立 OpenGL 的 pixel buffer object,用來對應到 CUDA ray casting 儲存結果的記憶體空間。也直接拿來畫出結果。 |
| cleanup | 清理資料用的。 |
| iDivUp | 做除法的無條件進位,用來算 grid 大小用的。 |
| initCuda | 起始化 CUDA 的資料。 主要是把讀進來的資料建立成 3D Texture,以及建立顏色對應用的 transfer function(包含陣列資料以及 1D texture)。 |
| render | 把旋轉矩陣由 host memory 複製成 device 上的 constant 變數。然後呼叫 kernel 函式,進行計算。 |
| display | glut 的 callback function,用來顯示用的,每次要更新畫面,都是執行這個函式。 他會計算物體的旋轉矩陣,然後再呼叫 render() 來做 ray casting 計算,最後再把儲存了結果的 pixel buffer object 畫出來。 |
| reshape motion mouse keyboard | 這四個 function 是 glut 的 callback function。 reshape 是當視窗大小位置改變時會被執行到、motion 是滑鼠移動時會被呼叫的、mouse 是滑鼠按鈕會執行的函式、keyboard 則是鍵盤的。 |
而在 volumeRender_kernel.cu 中,則是:
| intersectBox | 計算一條視線和 Volume 的 box 的交點,並傳回相交的最近點和最遠點。 |
| mul | 計算矩陣乘上一個向量。 |
| rgbaFloatToInt | 把 rgba 四項的 color,轉換成一個 int 來儲存。 |
| d_render | CUDA 的 device kernel function。 為每一個像素,用 Ray casting 的方法來計算他的顏色。 |
intersectBox計算一條視線和 Volume 的 box 的交點,並傳回相交的最近點和最遠點。
mul計算矩陣乘上一個向量。
rgbaFloatToInt把 rgba 四項的 color,轉換成一個 int 來儲存。
d_renderCUDA 的 device kernel function。
為每一個像素,用 Ray casting 的方法來計算他的顏色。
本文来自:http://heresy.spaces.live.com/blog/cns%21E0070FB8ECF9015F%213597.entry