2013-04-07 99 views
2

我正在製作一個顯示行星的2D圖形應用程序。我說2D,因爲該應用的大部分將是2D。然而,我希望將一些3D對象渲染爲離屏(到紋理)的動態精靈,透明(可能是半透明)區域,然後將這些渲染紋理渲染爲活動屏幕作爲2D紋理四邊形。在這種情況下,直接渲染到屏幕上的3D對象不是最優的,因爲這需要我實施某種3D拾取。我在數學上還沒那麼先進。還要注意,主屏幕渲染將是正確的,而屏幕外渲染將是透視。Android /離線渲染紋理

我該如何做到這一點(一般的想法,不需要具體細節),以及最有效的方法是什麼?這會減少對各種設備的支持嗎?此外,如果3D精靈渲染每隔一幀(例如旋轉精細的數量)不斷刷新,會不會通過連續卸載/重新加載紋理來消除幀率?我想有些場景可能有多達10個這樣的3D屏幕外精靈。

感謝您的幫助

回答

1

如果你真的必須使用屏幕外渲染只是搜索FBO(幀緩衝區對象),並附加一個紋理,然後使用紋理在主視圖2D。這是一個非常簡單的過程,但可能會降低速度。你可能無法做任何多線程,所以你應該創建一個FBO。它的尺寸可能必須是2的冪,所以如果你願意,分辨率可能會不同。此過程不會連續加載/卸載任何內容,創建紋理時會分配數據,GL會直接從其中繪製/讀取數據。這裏最大的缺點就是內存。你將創建多達10個這樣的紋理來繪製它們並呈現一次。

將這些對象放置在主緩衝區上的特定位置可能非常容易:使所有邏輯彷彿要繪製全屏行星,但使用「視口」方法將其放置到特定位置屏幕的一部分。

如果這些行星圖像只會根據用戶請求更新(您不想每幀畫出它們),那麼我建議您嘗試將兩者結合起來:創建一個尺寸相同或更大的紋理的FBO然後使用「視口」方法將所有行星繪製成單一紋理。然後你可以更新任何你想要的,只是不清除緩衝區,而是在緩衝區/紋理的特定部分繪製清晰的矩形。並保持繪製整個紋理到主緩衝區。

+0

我想我知道你在說什麼。您可能會建議使用視口將我的繪圖約束到主屏幕的特定區域,並在那裏渲染3D行星。這聽起來像一個好主意。但是,(每一幀)創建視區,將渲染模式更改爲透視圖,渲染行星,然後將視圖更改回正切,會更昂貴嗎?這可能每幀發生幾次。看起來屏幕外緩衝區(FBO)具有其自己的確定渲染狀態會使狀態更改更少。 – user2255673 2013-04-08 21:59:23

+0

沒有任何機會切換視窗和某些矩陣比任何離屏緩衝區慢。此外,如果您使用ES1,甚至不能擁有「自己的確定渲染狀態」,則在繪製到另一個緩衝區然後返回時必須將其切換。如果你使用ES2,你可以在兩種情況下都有兩種程序,每種都有自己的狀態。 – 2013-04-09 05:30:23