0

「Androidゲームの開始」から取得したフレームワークを使用して、OpenGLES1.0でAndroidゲームを作成しています。

ラインストリップとそれに続くテクスチャポリゴンを使用していくつかの線を描画しようとしています。

しかし、何が起こっているのかというと、テクスチャを描画すると、テクスチャブロックの近くにない場合でも、最初に描画された線が空白になります。

長い間頭をぶつけた後、アルファチャネルのない画像に切り替えると、それが機能し、背景がクリアされないことを発見しました。しかし、背景を透明にして画像に戻ると、問題が発生します。

これがいくつかのスクリーンショットの写真です:http://imgbox.com/abxDKzSd 上の写真はアルファなしの画像を使用した画面を示しています。下の写真はまったく同じですが、画像は透明です。

  • アクティビティの開始時に線が非常に短時間点滅するのがわかりますが、その後は決して表示されません
  • ブレンディングを有効にしています
  • 私のテクスチャの寸法は2の累乗(128 x 32)です
  • 呼び出しのたびにglエラーがチェックされ、何も表示されません
  • Kindle Fire HDで直接実行していますが、エミュレーターはこれでまったく動作しないようです。

プリミティブをレンダリングしているコードのスニペットと、それに続くテクスチャブロックを次に示します。

GL10 gl = glGraphics.getGL();
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
gl.glEnable(GL10.GL_TEXTURE_2D);

m_guiCam.setViewportAndMatrices();

// draw the lines
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glLineWidth(15.0f);

m_vertices.position(0);
gl.glVertexPointer(2, GL10.GL_FLOAT, VERTEX_SIZE, m_vertices);
gl.glDrawArrays(GL10.GL_LINE_STRIP, 0, m_numVerts);

// draw textures
m_guiCam.setViewportAndMatrices();
gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);

m_batcher.beginBatch(Assets.mfTex);
TextureRegion keyFrame = Assets.mfAnim.getKeyFrame(0.0f, Animation.ANIMATION_LOOPING);
m_batcher.drawSprite(250, 250, 32, 32, keyFrame);
m_batcher.endBatch();

gl.glDisable(GL10.GL_BLEND);

私は管理できる最小の例を作成しましたが、それでも問題が発生します。https ://docs.google.com/folder/d/0Bz7e5tdnz97Id21XZkJoQ005NlU/edit?usp=sharingから入手できます。

誰かが私がこれをしている理由を理解するのを手伝ってもらえますか?私はそれを動作させることができません!

4

2 に答える 2

0

GL_DEPTH_TESTすでに存在するものよりも高い/等しい深さで何かを描く場合は、無効にする必要があります。そうしないと、表示されません。

したがって、あなたの場合、ブレンドを有効にする場所を追加gl.glDisable(GL10.GL_DEPTH_TEST)します(ブレンドしない場合は再度有効にします)。
描画の開始時にデプスバッファもクリアすることをお勧めします。gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT)

于 2013-03-23T12:42:34.993 に答える
0

Ok!ついにそれを理解した

私は移動しなければならなかったことが判明しました

gl.glEnable(GL10.GL_TEXTURE_2D);

線をレンダリングしていた場所ので呼び出します。ブレンドを有効にした直後に入れました。また、テクスチャスプライトを描画した後、テクスチャリングを無効にする必要がありました。それ以外の場合は、次のフレームでラインを再度レンダリングするために戻ったときにテクスチャリングが有効になっているためです。

したがって、テクスチャを有効にすることについての何かは、線画を混乱させるのに十分でした。鈍い!

于 2013-03-28T18:13:27.340 に答える