【问题标题】:LibGDX renderable only passing through shaders once?LibGDX 渲染只能通过着色器一次?
【发布时间】:2023-03-30 05:44:02
【问题描述】:

我有一个 3D 精灵的东西,看起来像 https://xoppa.github.io/blog/a-simple-card-game/ 的最后一步。像这样生成它的可渲染对象

 public void getRenderables(Array<Renderable> renderables, Pool<Renderable> pool) {
        meshBuilder.begin(mesh.getVertexAttributes());
        meshBuilder.part("cards", GL20.GL_TRIANGLES, renderable.meshPart);
        for (Card card : this) {
            meshBuilder.setVertexTransform(card.transform);
            meshBuilder.addMesh(card.vertices, card.indices);
        }
        meshBuilder.end(mesh);

        renderables.add(renderable);
    }

奇怪的是,它似乎第一次被模型批处理渲染是它唯一的样子。例如,如果我用帧缓冲区中的普通着色器渲染它,然后用深度图着色器(它只输出不同的灰色阴影)再次渲染它,它不知何故有颜色。由此,我假设它不会因为任何原因再次通过着色器。

有谁知道这是为什么?这对我来说太奇怪了。

虽然我知道贴花存在,但我希望“3D 精灵”与其他所有内容一起渲染。

【问题讨论】:

    标签: java opengl libgdx


    【解决方案1】:

    好的,我搞定了。问题是它只添加了一次可渲染;相反,它每次都需要添加一个新的可渲染对象。

    val renderable = pool.obtain()
    renderable.material = mat
    ...
    renderables.add(renderable)
    

    编辑:

    更好的答案是,可渲染对象缓存它们使用的着色器。 renderable.shader = null 也可以。

    【讨论】:

      猜你喜欢
      • 2014-08-16
      • 1970-01-01
      • 1970-01-01
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多