簡體   English   中英

在openGL中使用着色器顯示體素

[英]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)為紅色等。

現在,對於每個框架,您都將立方體的前表面繪制到紋理,然后將立方體的后表面繪制到第二個紋理。

在最后的渲染,你可以使用這兩種紋理來獲得enterexit三維向量,已經在紋理空間,使您的最終着色器簡單得多。

您可以在此處閱讀更好的描述:

http://graphicsrunner.blogspot.com/2009/01/volume-rendering-101.html

http://web.cse.ohio-state.edu/~tong/vr/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM