【问题标题】:How to use blending in libgdx?如何在 libgdx 中使用混合?
【发布时间】:2018-04-09 16:55:09
【问题描述】:

如何为 libgdx java 改编这段 c# 代码?

SpriteBatch.Begin(SpriteSortMode.Texture, maxBlend);

private static readonly BlendState maxBlend = new BlendState() {
    AlphaBlendFunction = BlendFunction.Max,
    ColorBlendFunction = BlendFunction.Max,
    AlphaDestinationBlend = Blend.One,
    AlphaSourceBlend = Blend.One,
    ColorDestinationBlend = Blend.One,
    ColorSourceBlend = Blend.One
};

我在那里找到了它: article

试过这段代码,但它不能正常工作:

batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE);
batch.setBlendFunction(GL20.GL_SRC_COLOR, GL20.GL_ONE);

还有这个:

Gdx.gl.glEnable(Gdx.gl20.GL_BLEND);
Gdx.gl.glBlendFunc(Gdx.gl20.GL_ONE, Gdx.gl20.GL_ONE);
Gdx.gl.glEnable(Gdx.gl20.GL_BLEND_COLOR);
Gdx.gl.glBlendFunc(Gdx.gl20.GL_ONE, Gdx.gl20.GL_ONE);

怎么做?

【问题讨论】:

    标签: java opengl libgdx


    【解决方案1】:

    batch.setBlendFunction() 方法采用混合函数的 SRC 和 DST 参数,而不是像您正在做的通道和参数。

    默认情况下,OpenGL 同时将 RGB 和 alpha 更改为相同的值。所以你的电话应该是:

    batch.setBlendFunction(GL20.GL_ONE, GL20.GL_ONE);
    

    要使用 MAX 混合方程,您必须使用 GL 3.0,因为 OpenGL ES 2.0 不支持它。紧跟在batch.begin() 之后:

    Gdx.gl30.glBlendEquation(GL30.GL_MAX);
    

    要在更改后“清理”,请将其放在 batch.end() 之后,以便按预期绘制其他内容:

    Gdx.gl30.glBlendEquation(GL20.GL_FUNC_ADD);
    

    【讨论】:

      【解决方案2】:
      1. 您可以创建使用 C# 方法的包装库或 Java 字节代码。您应该能够使用 VisualStudio 自动生成和导出新的包装器库,如下所述:Wrap C# Libraries for Java

      2. 为什么要坚持使用 libgdx?您可以在 Java 中使用 OpenGL:Java Binding for the OpenGL Library

      【讨论】:

      • 2 个可怕的建议
      猜你喜欢
      • 2014-10-10
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2014-08-25
      • 2020-10-18
      • 1970-01-01
      • 2015-07-25
      • 2015-04-14
      相关资源
      最近更新 更多