技术开发 频道

CUDA Volume Rendering[Part1:简介]

  他的程式檔有兩個:

  volumeRender.cu

  主程式、資料讀取和 OpenGL 等相關的部分。

  volumeRender_kernel.cu

  實際做 ray casting 的 CUDA kernel。

  在 volumeRender.cu 中的 function 列表如下:

mainmain 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 函式,進行計算。
displayglut 的 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_renderCUDA 的 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

0
相关文章