结合Libgdx中的模型实例

时间:2016-03-08 17:24:30

标签: java libgdx

我必须在libgdx中使用数字,圆锥和方框:

   ModelBuilder modelBuilder = new ModelBuilder();
      Model cone= modelBuilder.createCone(40f,250f,40f,8,cMaterial, VertexAttributes.Usage.Position|VertexAttributes.Usage.Normal|VertexAttributes.Usage.TextureCoordinates);
    Material tMaterial = new Material(ColorAttribute.createDiffuse(com.badlogic.gdx.graphics.Color.GRAY));
    Texture troncoTexture = new Texture(Gdx.files.internal("t.jpg"));
    TextureAttribute taTronco = new TextureAttribute(TextureAttribute.Diffuse,troncoTexture);
    tMaterial.set(taTronco);
    Model cylinder= modelBuilder.createCylinder(20, 320, 20, 12, boxMaterial, VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal | VertexAttributes.Usage.TextureCoordinates);

有什么方法可以将两个模型组合成一个新模型或modelInstance,所以当我应用转换时,两个模型同时移动?

示例:

Model myCominedModel = new Model(cone,cylinder) //Something like this is possible?
myCombinedModel.rotate(1,1,1,60) // Rotate both models

1 个答案:

答案 0 :(得分:3)

您可以使用ModelCache合并一个或多个Models。这将在可能的情况下将它们合并到相同的网格和render call中,这将导致它们的个别转换直接应用。

如果您只想将一个模型的节点添加到另一个模型,那么您可以使用model1执行此操作。但请注意,这不会使model2负责管理model1的资源,当您不再需要ModelBuilder.rebuildReferences(model1)时,您仍然需要处置这两个模型(但不是在此之前) )。要解决这个问题(以及对材料等的引用),您可以使用静态model2方法,之后您应该放弃ModelInstance,但处理它。

还有其他一些选择。例如。为了防止必须处理一次性用品的所有权,您可以将Model代替ModelBuilder。您还可以使用ModelBuilder创建新模型并将两个模型的节点添加到其中。

那说;在您的示例代码中,您首先使用ModelBuilder modelBuilder = new ModelBuilder(); modelBuilder.begin(); modelBuilder.part("cone", GL20.GL_TRIANGLES, Usage.Position | Usage.Normal | Usage.TextureCoordinates, cMaterial) .cone(40f,250f,40f,8); modelBuilder.part("cylinder", GL20.GL_TRIANGLES, Usage.Position | Usage.Normal | Usage.TextureCoordinates, boxMaterial) .cylinder(20, 320, 20, 12); Model model = modelBuilder.end(); 创建两个单独的模型,然后询问如何组合它们。你也可以在第一时间建立一个模型。这看起来像(未经测试的代码):

modelBuilder.manage(troncoTexture)

有关详细信息,请参阅this link。请注意,在您的代码段中,您正在创建材料而不实际使用它。你也在那里创建一个纹理。请记住,需要处理纹理。如果您想让模型负责为您处置它,那么您可以致电part()

另请注意,如果您不需要锥体和圆柱体的单独材料,则不需要为其创建单独的node()。另一方面,如果您希望能够在模型中彼此独立地移动它们,那么您可以在每个部分之前调用spell:方法。