2016-04-03 25 views
2

我正在與android上的opengl es工作。我有一個3d人形模型,我可以在其上放置另一個3d模型的髮型。渲染時,我可以發現,在兩個物體非常接近/重合(頭髮區域)的區域,渲染不合適,實際上我在不同的移動設備上得到不同的結果。我懷疑這是z戰鬥。是否有一些解決方案可以在所有移動設備上保持一致,並且可以通過opengl正確渲染對象。我附上了快照供參考。Opengl ES,問題,同時渲染關閉對象

在這裏,我有我已經把頭髮模型,但不是顯示在頭頂的頭髮,我得到這樣的渲染的人臉模型。

+1

這聽起來和描述中的z-fighting完全一樣。你爲什麼懷疑它是z戰鬥?請注意,許多較舊的Android設備僅支持16位深度緩衝區,處理這可能是一個重大挑戰。你可以張貼截圖嗎?我猜想其他可能的候選人可能會對混合進行深度排序,頭髮模型通常會對alpha混合進行正確的挑戰,因爲它們通常具有透明度的多邊形交叉。 – Columbo

+0

我附上了顯示該問題的圖像。請通過。 – sreesreenu

+0

謝謝。我懷疑有深度測試根本沒有工作,或者是錯誤的方法(所以更遠的東西會模糊更接近的東西),或者背面剔除是在剔除錯誤的面部。當沒有頭髮模型和渲染是正確的時,你能展示它的樣子嗎?如果您同時渲染頭部和頭髮模型,但是頭髮模型偏向一側,渲染是否正確或破裂? (您的頭髮模型渲染器可能會設置一些渲染狀態,這些渲染狀態會破壞您的場景) – Columbo

回答

0

你是否嘗試在着色器中更改浮點精度?

precision highp float; 

例如。我注意到不同手機上的不同結果,如果某些設備上沒有啓用highp,結果也不好。

縮放場景也可以解決問題。

+0

我已經試過這個,但它似乎並不工作 – sreesreenu

+0

我可以發現這個問題是特定於Adreno系列GPU的設備,只有 – sreesreenu

+0

而且您還嘗試將其顯着擴展? – reden