[英]Display voxels using shaders in openGL
我正在使用渲染管道進行體素化,現在我已成功使用頂點+幾何+片段着色器對場景進行體素化。 現在,我的體素以3D紋理存儲,其大小為例如128x128x128。
我的場景原始模型以(0,0,0)為中心,並且在正軸和負軸上都延伸。 但是,紋理在tex坐標中居中(63,63,63)。
我實現了一個簡單的光線邊界以進行可視化,但是它沒有考慮到相機的運動(我只能從非常固定的位置進行渲染,因為必須考慮3D紋理的不同坐標來生成我的光線)。
我的問題是:我該如何映射光線,以便在3D模型的坐標中以D方向在Po點生成光線,但在紋理坐標中對應位置的體素與3D世界中相機的每個運動相交?重新映射到體素坐標?
現在,我以這種方式生成光線:在相機前面的位置(63,63,-20)創建一個四邊形,向(63,63,3)的方向投射光線
我認為您應該將整個視圖變換矩陣存儲在着色器統一參數中。 然后,對於每個着色器執行,您可以使用其屏幕坐標和視圖變換來計算特定像素的視圖射線方向。 有了射線方向和相機位置,您就可以像現在一樣使用它們。
還有另一種方法可以嘗試:
假設您有一個(0,0,0)->(1,1,1)立方體,並根據每個角的位置為其分配顏色,例如(1,0,0)為紅色等。
現在,對於每個框架,您都將立方體的前表面繪制到紋理,然后將立方體的后表面繪制到第二個紋理。
在最后的渲染,你可以使用這兩種紋理來獲得enter
和exit
三維向量,已經在紋理空間,使您的最終着色器簡單得多。
您可以在此處閱讀更好的描述:
http://graphicsrunner.blogspot.com/2009/01/volume-rendering-101.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.