2012年11月27日火曜日

Android OpenGL ES ワンポイントテクニック その1

OpenGLでテクスチャを貼ったポリゴンを表示した場合、デフォルトでは、表も裏も表示されます。回転させた場合など、裏面が表示されているときは裏返しの画像になるわけですね。
裏面を表示させたくない、あるいは裏面だけを表示したい場合、カリングという機能を使います。

  // カリングを有効化、表か裏しか描画されなくなる
  gl.glEnable(GL10.GL_CULL_FACE);

  // 両面描画するよう戻すときは、カリングを無効化します。
  gl.glDisable(GL10.GL_CULL_FACE);


描画しない面を指定するときは、glCullFaceを使います。
  // 表面のみ描画                
  gl.glCullFace(GL10.GL_BACK);

  // 裏面のみ描画
  gl.glCullFace(GL10.GL_FRONT);

glCullFaceのパラメータは「描画しない面」であることに注意してください。

応用例として、くるくる回るトランプを考えます。
テクスチャとして、トランプの表と裏、それぞれの画像を用意しておきましょう。

onSurfaceChangedなどで、カリングを有効化しておきます。

  // カリングを有効化、表か裏しか描画されなくなる
  gl.glEnable(GL10.GL_CULL_FACE);

onDrawFrameでトランプを描画するとき、表と裏それぞれの画像を同じ座標、同じ大きさで描画します。その時に、glCullFaceでどちらの面を表示するか指定します。

  // 表面のみ描画                
  gl.glCullFace(GL10.GL_BACK);
  トランプの表画像を描画する

  // 裏面のみ描画
  gl.glCullFace(GL10.GL_FRONT);
  トランプの裏画像を描画する

これで、トランプをくるくる回転させると、表が見えているときは表の画像、裏が見えているときは裏の画像が表示されるようになります。



0 件のコメント:

コメントを投稿