我正试图从单个纹理移动到使用纹理图集为我的框(它们都显示单独的字母为类似拼字游戏)。我坚持这一点,我找到的所有例子都是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);
...
答案 0 :(得分:1)
我认为目前无法以这种方式使用TextureAtlas
。创建TextureAttribute
的唯一可能方法是提供Texture
。纹理是独立的PixMap
。
TextureRegion
描述了一个更大Texture
的区域。目前似乎没有办法在API中从Texture
创建TextureRegion
。 TextureRegion.getTexture()
只会检索它来自的地图集的完整纹理。
实际上,API没有提供这样的转换,因为它破坏了地图集的目的。通过使所有区域成为单独的纹理,您将不再获得任何性能。
TextureAttribute
目前似乎完全缺乏对纹理类的支持,否则它必须提供TextureRegion
而不是Textures
的方法。