【发布时间】:2013-03-29 02:13:27
【问题描述】:
我正在使用“beginning android games”中的框架编写一个带有 open gl es 1.0 的 android 游戏。
我正在尝试使用线条绘制一些线条,然后是带纹理的多边形。
但是发生的情况是,当我绘制纹理时,它会将最先绘制的线条消隐掉,即使它们离纹理块很远。
在我的头撞了很长时间之后,我发现如果我切换到没有 Alpha 通道的图像,它可以工作并且不会清除背景。但是,如果我回到具有透明背景的图像,就会出现问题。
这是一张带有一些截图的图片:http://imgbox.com/abxDKzSd 最上面的那张是使用不带 alpha 的图片显示的屏幕,下面那张是完全一样的,但是图片是透明的。
- 当活动开始时,我看到线条非常短暂地闪烁,但在那之后就再也没有
- 我正在启用混合
- 我的纹理尺寸是 2 的幂 (128 x 32)
- 每次通话后都会检查 gl 错误,但没有看到任何错误
- 我直接在我的 kindle fire HD 上运行它,模拟器似乎根本无法使用它。
这是我渲染图元的代码的 sn-p,后面是我的纹理块:
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
谁能帮我弄清楚为什么会这样?我就是无法让它工作!
【问题讨论】: