2011-02-07 43 views
0

在我的Android應用程序中,我使用GLSurfaceView來繪製3D對象,就像一個盒子對象。我通過使用OpenGL ES API來翻譯該對象。在動畫過程中的某一時刻,對象將從可見視口窗口中消失。此時,我必須從正在繪製的其他對象的集合中刪除此對象。我如何檢測到對象已經離開視圖?短碼示例將不勝感激。如何檢測對象是否已移出OpenGL ES中的可見窗口?

回答

1

Here is a frustum class for android,代碼從here的端口。它允許您從OpenGL中提取截錐參數,然後測試包含在視圖體積中的各種幾何圖元(點,球體,軸對齊的長方體)。

兩件事看出來:

  1. 在update()方法的應-是冗餘的錯誤處理代碼。有關此故事,請參見here。看起來像是一隻海森貓。
  2. extractFromOGL()使用glGetFloat - 此方法未在PixelFlinger軟件渲染器中實現。如果您針對真正的低端設備或使用模擬器,則必須自己計算投影和模型視圖矩陣,並手動調用update()。
1

你在找什麼叫做viewing frustum culling

的視錐是體積可見 到所述虛擬相機的幾何 表示。當然, 本卷以外的對象在最終圖像中不會顯示爲 ,因此它們將被丟棄。通常情況下,物體位於觀看平截頭體的邊界上。 這些對象沿着這個邊界在 被稱爲剪裁的過程中被切割成片段 ,並且 位於截錐體之外的片斷被丟棄 ,因爲沒有地方繪製它們。

發表了幾篇教程:

http://www.lighthouse3d.com/opengl/viewfrustum/

http://www.crownandcutlass.com/features/technicaldetails/frustum.html

+0

我正在尋找OpenGL ES Api,就像給定一個對象幾何體一樣,它會測試該對象是否在視口窗口之外,然後返回測試結果。 – ace 2011-02-07 18:54:46

+1

在OpenGL ES中沒有API。正如我在上面指出的那樣,您需要實施平截頭體剔除。 – 2011-02-07 19:29:36

相關問題