2011-02-07 10 views
0

私のAndroidアプリケーションでは、GLSurfaceViewを使用して、ボックスオブジェクトのように3Dオブジェクトを描画しています。私はOpenGL ES apisを使ってこのオブジェクトを翻訳することによってこのオブジェクトをアニメーション化します。アニメーション中のある時点で、オブジェクトは可視のビューポートウィンドウから消えてしまいます。この時点で、このオブジェクトを描画されている他のオブジェクトのコレクションから削除する必要があります。オブジェクトがビューからなくなったことをどのように検出できますか?短いコードのサンプルをいただければ幸いです。OpenGL ESでオブジェクトが可視ウィンドウから移動したかどうかを検出する方法は?

答えて

1

Here is a frustum class for androidhereからのコードのポート。これにより、OpenGLから錐台パラメータを抽出し、ビューボリュームに含めるためのさまざまなジオメトリプリミティブ(点、球、軸に沿った立方体)をテストできます。外を見るために

2つのこと:

  1. update()メソッド内のコードを取り扱う-あるべき冗長エラー。この話については、hereを参照してください。それはheisenbugのように見えます。
  2. extractFromOGL()はglGetFloatを使用します。このメソッドはPixelFlingerソフトウェアレンダラーでは実装されていません。実際にローエンドのデバイスをターゲットにしている場合や、エミュレータを使用している場合は、自分で投影とモデルビューの行列を計算し、update()を手動で呼び出す必要があります。
+0

ありがとう。最後に、modelview行列をよく理解した後に問題を解決しました。 – ace

1

お探しのものはviewing frustum cullingとなります。

視錐台は、仮想カメラの 見える体積の幾何学 表現です。当然、このボリューム外の オブジェクトは最終イメージに表示されないため、 は破棄されます。しばしば、オブジェクトは、視錐台の境界にある にある。 これらのオブジェクトは、この境界に沿って のクリッピングと呼ばれる処理で切り取られ、 は、切り取る場所がないため、 が破棄されます。トピックの

いくつかのチュートリアル:

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

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

+0

オブジェクトジオメトリのようなものであるOpenGL ES Apiを探していますが、オブジェクトがビューポートウィンドウ外にあるかどうかをテストしてテスト結果を返します。 – ace

+1

OpenGL ESのAPIはありません。私が上で指摘したように、あなたは自分自身の錐台の淘汰を実装する必要があります。ありがとう。 –

関連する問題