如何在libgdx 3D中使用TextureAtlas的纹理

时间:2014-01-09 09:04:40

标签: android libgdx

我正试图从单个纹理移动到使用纹理图集为我的框(它们都显示单独的字母为类似拼字游戏)。我坚持这一点,我找到的所有例子都是2D精灵。

如何使用AtlasRegion中正确的贴图坐标创建材质并将其指定给3D曲面?

public void createModelInstance(TextureAtlas letterAtlas) {
   AtlasRegion region = letterAtlas.findRegion(this.textureID);
   Material mat = new Material(???);
   modelInstance = new ModelInstance(modelTile); 
   modelInstance.nodes.get(0).parts.get(0).material.set(mat);
}

当使用每个纹理的单个文件时,这有效:

Material mat = new Material(TextureAttribute.createDiffuse(
    assetManager.get("textures/" + textureFile, Texture.class));

创建表面:

MeshPartBuilder tileBuilder;
tileBuilder = modelBuilder.part("top", GL10.GL_TRIANGLES, Usage.Position | Usage.Normal | Usage.TextureCoordinates, new Material(ColorAttribute.createDiffuse(Color.WHITE)));
tileBuilder.rect(-0.45f, 0.1f, 0.45f,   0.45f, 0.1f, 0.45f,    0.45f, 0.1f, -0.45f,  -0.45f, 0.1f, -0.45f,  0f, 1f, 0f);
...

1 个答案:

答案 0 :(得分:1)

我认为目前无法以这种方式使用TextureAtlas。创建TextureAttribute的唯一可能方法是提供Texture。纹理是独立的PixMap

相比之下,

TextureRegion描述了一个更大Texture的区域。目前似乎没有办法在API中从Texture创建TextureRegionTextureRegion.getTexture()只会检索它来自的地图集的完整纹理。

实际上,API没有提供这样的转换,因为它破坏了地图集的目的。通过使所有区域成为单独的纹理,您将不再获得任何性能。

TextureAttribute目前似乎完全缺乏对纹理类的支持,否则它必须提供TextureRegion而不是Textures的方法。