【问题标题】:libgdx how to set alpha on multiple sprites as if it were a single spritelibgdx如何在多个精灵上设置alpha,就好像它是单个精灵一样
【发布时间】:2016-03-28 11:19:51
【问题描述】:

我正在尝试实现如下图(B)所示的效果。如果我在 Sprite Batch 上设置 alpha,我最终会得到 (C) 中所示的效果。谁能告诉我如何才能获得(B)中的预期效果。

请注意,我并不是要掩盖精灵。我正在尝试设置一个全局 alpha,它将影响设置全局 alpha 后绘制的所有精灵。一个使用示例是淡入或淡出的对话框。

【问题讨论】:

  • 我知道的唯一方法是将它们全部以完全不透明的方式绘制到 FrameBuffer 中,然后以部分透明的方式将 FrameBuffer 的纹理绘制到屏幕上。
  • @Tenfour04: "以完全不透明的方式绘制它们" 为了确保我们在同一页面上,您仍然需要编写 阿尔法。您只是没有使用 alpha 进行 混合
  • 我的意思是你通常使用混合和 alpha 绘制它们,但不要在第一遍中通过使用降低 alpha 的顶点颜色来降低它们的不透明度。
  • 你尝试过混合模式 Gdx.gl.glEnable(GL20.GL_BLEND); Gdx.gl20.glBlendFuncSeparate(GL20.GL_SRC_ALPHA,GL20.GL_ONE_MINUS_SRC_ALPHA,GL20.GL_ONE,GL20.GL_ONE); ?

标签: opengl libgdx sprite alpha spritebatch


【解决方案1】:

您所要求的并非微不足道。毕竟,混合是在每个三角形的基础上工作的,两个独立的基元是两个 独立的 基元。一个接一个地混合在一起,它们之间没有任何联系。

实现您想要的唯一通用方法是将这些对象的总和渲染到单独的帧缓冲区,写入每个对象的 alpha 值,但不进行混合。请注意,单独的帧缓冲区应该有一个 alpha 分量,并且在您开始编写之前应该已将其清除为 0。

一旦你完成了那个单独的帧缓冲区,你就可以将它渲染为一个四边形,使用混合(根据你的需要添加一些 alpha)。

【讨论】:

  • 嗨,我试过使用渲染到纹理的像素图。这可以按需要工作,但在内存和时间方面具有非常高的开销。帧缓冲区会有所改进吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-03
  • 1970-01-01
相关资源
最近更新 更多