【问题标题】:LibGDX dynamically build (fast) ModelLibGDX 动态构建(快速)模型
【发布时间】:2014-09-14 19:24:38
【问题描述】:

我正在创建一个类似于体素的游戏,其中体素小于您的平均我的世界克隆。这些体素没有确定块类型的 ID,而是颜色。

我的风景对象由微小的体素组成,由包含每个体素颜色整数的二进制数据构成。然后这些从体素构建一个小型模型。

这个问题是它不接受我的带有颜色的小网格,但要求我提供覆盖所有其他颜色的材质。我还尝试了另一种替代方法,它制作了很多微型模型,但这太慢了。

我目前拥有的,将场景渲染为白色:

private void buildFromColours(int[][][] colours) {
    MeshBuilder mb = new MeshBuilder();
    ModelBuilder mm = new ModelBuilder();
    mm.begin();

    List<Mesh> meshes = new LinkedList<Mesh>();
    for (int x = 0; x < colours.length; x++) {
        for (int y = 0; y < colours[x].length; y++) {
            for (int z = 0; z < colours[x][y].length; z++) {
                int col = colours[x][y][z];

                if ((col & 0xFF) == 0) {
                    continue;
                }


                mb.begin(VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal, GL20.GL_TRIANGLES);
                mb.setColor(new Color(col));
                mb.box(x, y, z, 1, 1, 1);
                Mesh m = mb.end();
                meshes.add(m);
            }
        }
    }

    Mesh finalMesh = Mesh.create(true, meshes.toArray(new Mesh[0]));
    mm.part("box", finalMesh, GL20.GL_TRIANGLES, new Material()); /* I have to specify a material :( */
    model = new ModelInstance(mm.end());
}

我现在不确定该去哪里。我必须能够在渲染时指定一个环境,因此使用着色器渲染一组网格将不起作用。

【问题讨论】:

  • 我可以向你保证,材质不会覆盖顶点颜色(它们是两个非常不同的东西)。您根本没有指定要使用顶点颜色,导致它们不被包括在内。考虑添加VertexAttributes.Usage.ColorPacked。顺便说一句,考虑阅读github.com/libgdx/libgdx/wiki/…
  • @Xoppa 谢谢你提到这一点!我马上去看看。

标签: java opengl libgdx


【解决方案1】:

我可以向您保证,材质不会覆盖顶点颜色(它们是两种截然不同的东西)。您根本没有指定要使用顶点颜色,导致它们不被包括在内。考虑添加VertexAttributes.Usage.ColorPacked

顺便说一句,您可能需要重新考虑您的方法(体素需要特别注意,MeshBuilder 并不真正适合)。如果您仍然想使用 ModelBuilder/MeshBuilder(您只需要其中一个,而不是两者都需要),请考虑阅读https://github.com/libgdx/libgdx/wiki/ModelBuilder%2C-MeshBuilder-and-MeshPartBuilder

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-11-02
  • 2014-06-17
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 2013-09-14
  • 2018-02-15
  • 1970-01-01
相关资源
最近更新 更多