【问题标题】:Open GL ES - texture with alpha clears backgroundOpengl ES - 带有 alpha 的纹理清除背景
【发布时间】: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

谁能帮我弄清楚为什么会这样?我就是无法让它工作!

【问题讨论】:

    标签: android opengl-es


    【解决方案1】:

    你需要禁用GL_DEPTH_TEST,否则如果你在比已经存在的东西更高/相等的深度上绘制一些东西,它就不会显示出来。

    因此,在您的情况下,请在启用混合的位置添加 gl.glDisable(GL10.GL_DEPTH_TEST)(并在不混合时再次启用它)。
    您可能还想在绘图开始时清除深度缓冲区:gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT)

    【讨论】:

    • 感谢您的建议!不幸的是,它仍然无法正常工作。这听起来像是正确的答案,但我不确定它如何解释没有 alpha 工作正常的纹理?
    【解决方案2】:

    好的!终于明白了

    原来我不得不移动

    gl.glEnable(GL10.GL_TEXTURE_2D);
    

    调用之后,我正在渲染我的线条。我是在启用混合后才放的。 在绘制纹理精灵后,我还必须禁用纹理。因为否则当它返回时仍然会启用纹理以在下一帧再次渲染我的线条。

    所以启用纹理的方法足以破坏线条绘制。 钝!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-11
      • 2013-06-27
      • 2010-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-04
      相关资源
      最近更新 更多