使用LibGDX创建空心圆柱体

时间:2014-02-22 14:09:52

标签: java android 3d libgdx

我正在尝试使用LibGDX在Android应用程序上创建一个空心圆柱体。看起来没有任何方法可以创建它。我想画两个圆筒。一个更大,更小的一个,我可以“移除”更大的内部,从而创建一个空心圆柱体。现在我问的是,还有更好的办法吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

你可以使用搅拌机制作一个obj http://www.youtube.com/watch?v=JFdVRdD9VSM

不要忘记对其进行三角测量。

并使用

加载

http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/assets/loaders/ModelLoader.html [仅包含在夜间]

你可以在gdx-test存储库中找到一个很好的例子 https://github.com/libgdx/libgdx/tree/master/tests/gdx-tests

答案 1 :(得分:1)

回答#1

有两种方法可以做到这一点。第一种是使用createCylinder() convenience method of ModelBuilder来创建一个包含单个圆柱网格的模型。

回答#2

使用MeshBuilder类的createCylinder()方法创建一个Mesh,然后将其包装在模型中。

示例(方式#2)

以下示例代码改编自this

    MeshBuilder meb = new MeshBuilder();
    final long atr = Usage.Position | Usage.Color; //Add  Usage.TextureCoordinates or similar here if you need it

    //Create mesh #1
    meb.begin(atr);
    meb.cylinder(4f, 6f, 4f, 16);
    Mesh cyl1 = meb.end();

    //Create mesh #2
    meb.begin(atr);
    meb.cylinder(4f, 6f, 4f, 16);
    Mesh cyl2 = meb.end();

    //Combine the two meshes into one model using ModelBuilder
    ModelBuilder mob = new ModelBuilder();
    mob.begin();
    mob.part("cylinder1", cyl1, Usage.Position | Usage.Normal | Usage.TextureCoordinates, new Material(ColorAttribute.createDiffuse(Color.RED), ColorAttribute.createSpecular(1, 1, 1, 1), FloatAttribute.createShininess(8f)));
    mob.part("cylinder2", cyl2, Usage.Position | Usage.Normal | Usage.TextureCoordinates, new Material(ColorAttribute.createDiffuse(Color.GREEN), ColorAttribute.createSpecular(1, 1, 1, 1), FloatAttribute.createShininess(8f))).mesh.transform(new Matrix4().translate(0, 0, -2f));
    Model cyl = mob.end();