2014-02-10 15 views
4

合併模型我是新來LibGDX 3D設備,我想知道我怎麼可以使用ModelBuilder#createCylinder class.I創建合併兩個汽缸有兩個ModelInstances:從模型構建器中LibGDX

  • 第一個是白色氣缸,
  • 第二紅色氣缸具有相同屬性

如何可以獲得僅一個氣缸來呈現(實例/模型/對象/不管可以呈現)將紅色ABOV組成e白色(或反之)。

Pixmap pixmap1 = new Pixmap(1, 1, Format.RGBA8888); 
pixmap1.setColor(Color.WHITE); 
pixmap1.fill(); 
Texture white = new Texture(pixmap1); 
//... 
Texture red = new Texture(pixmap2); 

model1 = modelBuilder.createCylinder(4f, 6f, 4f, 16, 
     new Material(
       TextureAttribute.createDiffuse(white), 
       ColorAttribute.createSpecular(1,1,1,1), 
       FloatAttribute.createShininess(8f)) 
     , Usage.Position | Usage.Normal | Usage.TextureCoordinates); 
model1I_white = new ModelInstance(model1, 0, 0, 0); 
//... 
model2I_red = new ModelInstance(model2, 0, 0, -2f); 

然後我使用ModelBatch#render渲染ModelInstance。

回答

4

而不是使用createCylinder(),你可以創建2個氣瓶與MeshBuilder類,並與部分組成最終缸()。

meshBuilder.begin(); 
meshBuilder.cylinder(4f, 6f, 4f, 16); 
Mesh cylinder1 = meshBuilder.end(); 

meshBuilder.begin(); 
meshBuilder.cylinder(4f, 6f, 4f, 16); 
Mesh cylinder2 = meshBuilder.end(); 


modelBuilder.begin(); 

modelBuilder.part("cylinder1", 
    cylinder1, 
    Usage.Position | Usage.Normal | Usage.TextureCoordinates, 
    new Material(
     TextureAttribute.createDiffuse(white), 
     ColorAttribute.createSpecular(1,1,1,1), 
     FloatAttribute.createShininess(8f))); 

modelBuilder.part("cylinder2", 
    cylinder2, 
    Usage.Position | Usage.Normal | Usage.TextureCoordinates, 
    new Material(
     TextureAttribute.createDiffuse(red), 
     ColorAttribute.createSpecular(1,1,1,1), 
     FloatAttribute.createShininess(8f))) 
    .mesh.transform(new Matrix4().translate(0, 0, -2f)); 

Model finalCylinder = modelBuilder.end(); 
+0

我會嘗試這個toonight並告訴你,如果它工作很快。看起來很簡單!我喜歡它 – avianey

+2

終於把它與其它附加的呼叫工作,meshBuilder.begin後meshBuilder.part()()! – avianey

1

非常感謝Aurel分享的代碼。

大概libGdx的API稍微改變,我會發布完整的代碼至極爲我工作

MeshBuilder meshBuilder = new MeshBuilder(); 
    meshBuilder.begin(VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal); 
    meshBuilder.part("id1", GL20.GL_TRIANGLES); 
    meshBuilder.box(1f, 1f, 1f); 
    Mesh mesh1 = meshBuilder.end(); 

    meshBuilder.begin(VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal); 
    meshBuilder.part("id2", GL20.GL_TRIANGLES); 
    meshBuilder.cylinder(1f, 1f, 1f, 16); 
    Mesh mesh2 = meshBuilder.end(); 


    ModelBuilder modelBuilder = new ModelBuilder(); 
    modelBuilder.begin(); 

    modelBuilder.part("part1", 
      mesh1, 
      GL20.GL_TRIANGLES, 
      new Material(ColorAttribute.createDiffuse(Color.RED))); 

    modelBuilder.part("part2", 
      mesh2, 
      GL20.GL_TRIANGLES, 
      new Material(ColorAttribute.createDiffuse(Color.RED))) 
      .mesh.transform(new Matrix4().translate(1, 0, 0f)); 

爲了維護每一個網添加顏色VertxtAttributes.Usage.ColorPacked爲meshBuilder.begin()

 meshBuilder.begin(VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal | VertexAttributes.Usage.ColorPacked); 
+0

很高興分享此 – avianey