我想混合raymarching和通常的幾何渲染,但我不明白如何正確比較射線與存儲在緩衝區中的深度值的距離。OpenGL比較射線距離與深度緩衝區
在raymarching側,我已經從眼睛(紅點)開始射線。如果您只在固定的射線距離'T'上渲染碎片,則會看到一條曲線(在我的圖中爲黃色)。我明白這一點,因爲如果你從射線源Oa和Ob開始,並在T單位(Oa + T * Da和Ob + T * Db)期間遵循方向Da和Db,則只會看到中間的射線屏幕到達藍色平面。
現在在幾何方面,我直接從gl_FragCoord.z存儲值。但我不明白爲什麼我們在那裏看不到這種彎曲的效果。我用瘸子編輯了這張照片,用'posterize'功能來表達清楚。
我們看到直線,而不是曲線。
我這個深度值轉換爲距離OK(考慮到線性化的)。但是,當比較兩個距離時,我的屏幕邊上出現了問題。
有一件事我與投影和如何深度值缺少被存儲...我假定深度值是從近平面以下從眼睛開始光線的方向的(重新映射)的距離。
編輯: 它似乎寫這個問題,幫我一下。我現在看到爲什麼我們沒有看到這種曲線對深度緩衝區的影響:因爲Near和Far之間的距離對於屏幕側面的光線較大。因此即使深度值相同(中間或側面屏幕),距離也不是。
因此,似乎我的問題來自我將深度轉換爲距離的方式。我用下面的:
float z_n = 2.0 * mydepthvalue - 1.0;
float z_e = 2.0 * zNear * zFar/(zFar + zNear - z_n * (zFar - zNear));
然而,轉換後我還沒有看到這條曲線的效果,我需要爲我的射線距離比較。注意:此代碼不會考慮FragCoord.x和.Y,這是奇怪的,我...
在OpenGL中,不變深度的表面是垂直於攝像機方向的*平面*,而不是球形殼體(這稱爲直線投影)。因此,從攝像機到平面上某一點的光線距離會隨着其與攝像機軸線的偏移距離而雙曲*變化。 – meowgoesthedog