我正在使用从“开始安卓游戏”中获取的框架编写一个开放gl 1.0的安卓游戏。
我正在尝试使用线条绘制一些线条,然后是纹理多边形。
但正在发生的是,当我绘制纹理时,它会将首先绘制的线条消隐,即使它们不在纹理块附近。
在长时间撞击它之后,我发现如果我切换到没有alpha通道的图像,它会工作并且不会清除背景。但如果我以透明背景返回我的图像,则会出现问题。
这是一张带有屏幕截图的图片:http://imgbox.com/abxDKzSd 顶部的一个显示屏幕使用没有alpha的图像,下面的图像完全相同但图像有透明度。
这是代码的片段,我正在渲染我的基元,然后是我的纹理块:
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
任何人都可以帮我弄清楚它为什么会这样做吗?我无法让它发挥作用!
答案 0 :(得分:0)
你需要禁用GL_DEPTH_TEST
否则如果你绘制的东西的深度/深度已经超过已存在的东西,它就不会显示出来。
因此,在您的情况下,请在启用混合的位置添加gl.glDisable(GL10.GL_DEPTH_TEST)
(并在不混合时再次启用)。
您可能还需要在绘图开头清除深度缓冲区:gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT)
答案 1 :(得分:0)
确定!终于想通了
原来我必须移动
gl.glEnable(GL10.GL_TEXTURE_2D);
在之后调用来渲染我的线条。我在启用混合后就把它放了。 在绘制纹理精灵后,我还必须禁用纹理。因为否则纹理化仍然会在它回来时再次在下一帧渲染我的线时启用。
所以关于启用纹理的东西足以破坏线条画。 钝!