3D紋理展示方式之Slice(切片)

Demo:http://www.artvily.com/renderCase?sample=tex3D

3D紋理在基於volume rendering的渲染機制的相關應用中有着廣泛的應用。應用的領域非常廣泛,例如考古、醫學、材料科學,遊戲等等。

一般來說3D紋理,可以理解爲具有三個維度(width,height,depth)的數據類似於三維數組。一般的2D紋理我們可以認爲它就是一張圖片(實際就是一段內存(主內存和顯存)中的數據), 那麼3D紋理可以理解爲在depth維度疊在一起的若干張圖。那麼描述3D紋理數據的大小就是width*height*depth * stride,這個stride具體要看你用多少個字節來表示3D紋理數據中的一個(voxel)。在片段着色器中訪問的時候使用(s,t,r)或者(x,y,z)紋理空間座標,採樣器就會依據你自定義的NEAREST或者LINEAR來獲得插值結果->當前片段通過紋理座標(x,y,z)對應得到的紋理數據。這個數據可以可以直接展示出來也可以作爲其他計算的輸入數據例如光照或者體積光/霧/流體等。上圖使用Slice(切片)的方式展示3D紋理數據。上圖豎直向上的方向爲+Y軸,位於地表的點Y座標爲0。上圖是由幾十個平面組成,通過顯示每個平面對應的3D紋理數據,就構成了立體造型。每個面只是Y座標不同罷了。每個面上的每個像素點在世界空間的座標都可以計算得到得到對應的3D紋理座標,那麼一個面就相當於對應一個切片,理論上面越密集越能完整顯示,但是實際上像素的尺寸決定了即使面更密集意義也不大。從這個角度講,每個面的相關計算也就很簡單了。實際運行效果,請看上面的Demo.

Slice機制是一種有效的原理,至於如何實現有很多方式,這個具體因一個用而定。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章