[英]How to manipulate depth value to correct it in volume rendering?
我有一個兩階段的體積渲染器,我正在使用DVR方法渲染該體積,但是深度緩沖不適用於該體積,因為我是從盒子中使用光線投射的。
實際上我有一個盒子,我應該根據體積數據計算正確的深度值。
我在頂點着色器中有這個:
out float DEPTH ;
...
DEPTH = gl_Position.z / gl_Position.w;
並在片段中:
gl_FragDepth = (1.0 - 0.0) * 0.5 * DEPTH + (1.0 + 0.0) * 0.5;
而且它們恰好適合盒子,我的主要問題是如何在DEPTH上添加一些位以得出正確的深度值?
我也使用了(distanceToAdd/100 + DEPTH)
,但這是錯誤的。
任何想法?
經過一些澄清后,主要問題似乎是如何組合實體網格和體積,以便在相交時,體積僅渲染到實體對象的表面
為了解決這個問題,我們需要分兩次渲染場景
我將在以下各節中詳細說明
通常,您為光線行進算法計算兩個點:光線與立方體的近交和遠交。 這可以通過將射線x = o + t*d
轉換為立方體空間並為t
取最小t_min
和最大值t_max
來實現。 如果要使固體對象與體積相交,則需要確保正確調整這些點。
p
。 t_surf
,使p = o + t_surf * d
,即計算射線到達固體表面的距離 t_max
和t_surf
之間的最小值,並將其t_surf
距射線原點的新最大距離t_max
。 這樣,您將忽略位於實體表面后面的所有體積部分。 通過當前修改,可以在實體表面正確剔除該體積,但是仍然只能看到黑色背景,而不能看到實體表面的顏色。
為了解決這個問題,只需堅持從前到后的構圖並將初始值設置為表面的顏色(而不是像通常情況下那樣將其設置為黑色)。 這樣,如果體積在某個點上完全透明,則可以看到實心表面,如果它有些不透明,則會與表面前面的體積混合。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.