[英]Alternative to default Open GLES lines (3D)?
我目前正在嘗試在我的項目中實現剪影算法(使用Open GLES,它適用於移動設備,目前主要用於iPhone)。 要求之一是繪制一組3D線。 默認OpenGL線的問題是,粗線(出現間隙)時,它們的傾斜角度不好。 其他細微的偽影也很明顯,這會降低線條的視覺吸引力。
現在,我研究了使用某種四邊形條作為替代方法。 但是,在屏幕空間中繪制四邊形條需要某種可見性檢測-在實際3D世界中被遮蓋的線條不可見。
有許多解決此問題的方法-即定量隱形。 但是,考慮到需要采用射線投射,這種方法,特別是在處理能力有限的移動設備上,很難有效地實現。 環顧四周,我發現了本文 ,其中描述了使用z緩沖區采樣來實現這種效果的幾種方法。 但是,我不是該領域的專家,雖然我在某種程度上了解技術背后的理論,但是我不確定如何進行實際的實現。 我想知道是否有人可以在OpenGLES方面在更高的技術水平上指導我。 一般而言,我也歡迎任何有關3D線可見性的建議。
使用z緩沖區的技術對於iOS設備而言太復雜了-它需要沉重的像素着色器,並且(IMHO)會帶來一些視覺偽像。
如果模型不復雜,則可以在運行時找到幾何輪廓-例如,通過比較具有公共邊的多邊形法線:如果視圖空間中的direction的z值具有不同的形式(一個法線指向攝影機,另一個法線來自攝影機),則此邊緣應用於輪廓。
另一種方法是更“ FPS友好”:保留模型的拉伸版本。 然后首先渲染具有輪廓顏色(沒有紋理和光照)的拉伸模型,並在其上繪制普通模型。 您將需要更多的內存來存儲頂點,但不需要實時計算。
PS:在所有游戲中,我都看到輪廓是幾何的。
我已經找到了一種可以在iPhone 4S上很好地工作的解決方案(未經任何其他設備測試)。 它基於渲染世界空間四邊形的想法,並在GPU上全部進行輪廓檢測。 它遵循以下原則(雙關語無用):
這不能直接解決相鄰邊緣之間可能出現的間隙,但是要解決這個問題,它的靈活性要大得多。 一種解決方案可能涉及將大角度線之間的頂點與另一個四邊形橋接,目前我正在研究。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.