2012-08-30 105 views
1

基本上,我試圖用OpenGL | es來製作分層系統,它必須支持圖層層次結構(圖層可以有子圖層等)。當一個圖層有一個父圖層時,它在繪製時必須剪切到其父圖層。當所有圖層都是矩形的時候,它是非常直接的,我可以制定交叉點並且突出顯示邊界位。但是,每個圖層也可以有一個變換矩陣,如果我們在另一個圖層內部轉換一個圖層,它將不再是矩形,這意味着我不能只計算交點。在OpenGLes 1.1中設置邊界形狀?

下圖顯示了該問題(母體是粉紅色,而孩子在淡綠色):

Issue

對於上面的例子,一個glScissor呼叫就足夠了設置矩形邊界框,但這不會做,因爲父層也可以被轉換(所以它將不再是矩形)。另外,如果父圖層被轉換,那麼在子圖像被渲染之前,子圖像的變換矩陣會乘以父圖像的變換矩陣,因此即使在變換後,也會在父圖像內創建子圖像。

回答

0

幾點建議:

  • 夾的子層自己的幾何形狀(快,但你需要做數學題)。
  • 將每個圖層渲染爲紋理(靈活但很多層都很慢)。
  • 使用模板緩衝區(填充多個圖層的速度)。
+0

是的,我正在考慮使用#2,但它相當緩慢。是否有任何代碼片段或示例可以告訴我如何在使用4x4矩陣轉換兩個圖層時如何計算剪切幾何體? –

+0

「使用FBO +綁定紋理將每個圖層渲染爲紋理」?根據我的經驗,這應該相當快。無論如何,rasmus說你可以使用模板緩衝區,因爲你可以使用任何矩陣來繪製模板緩衝區。雖然我不能說它會更快,然後FBO的方法.. –

+0

變換組成兩個角落的點。你得到的基本上是兩個凸多邊形,你需要找到它們之間的交集。有這個算法。快速搜索顯示:[鏈接](http://oai.dtic.mil/oai/oai?verb=getRecord&metadataPrefix=html&identifier=ADA274722)。雖然FBO可以被認爲是快速的,但比這種方法要慢得多。 – rasmus