我正在使用取自“开始 android 游戏”的框架编写一个带有 open gl es 1.0 的 android 游戏。
我正在尝试使用线条绘制一些线条,然后是纹理多边形。
但是发生的事情是,当我绘制纹理时,它会将最先绘制的线条遮盖掉,即使它们离纹理块还很远。
在我的头撞了很长时间之后,我发现如果我切换到没有 Alpha 通道的图像,它可以工作并且不会清除背景。但是,如果我回到具有透明背景的图像,就会出现问题。
这是一张带有一些屏幕截图的图片:http: //imgbox.com/abxDKzSd 顶部是使用不带 alpha 的图像的屏幕,下面是完全一样的,但图像具有透明度。
- 当活动开始时,我看到线条非常短暂地闪烁,但在那之后就再也没有
- 我正在启用混合
- 我的纹理尺寸是 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
谁能帮我弄清楚为什么会这样?我就是无法让它工作!