【问题标题】:How to use texture from TextureAtlas in libgdx 3D如何在 libgdx 3D 中使用 TextureAtlas 中的纹理
【发布时间】:2014-01-27 17:43:46
【问题描述】:

我正在尝试从单独的纹理转移到为我的盒子使用纹理图集(它们都显示了类似拼字游戏的单独字母)。我坚持这一点,我找到的所有示例都是针对 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);
...

【问题讨论】:

  • 如果您需要纹理,您可以从 TextueAtlas.getTexture 获取纹理,也可以将纹理传递给自定义着色器。

标签: android libgdx


【解决方案1】:

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

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

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

TextureAttribute 目前似乎完全不支持纹理图集,否则它必须提供带有TextureRegions 的方法而不是Textures

【讨论】:

  • 现在已经不是这样了。所有工厂方法现在都有一个TextureRegion 版本,并且有一个通用构造函数,它接受一个类型和一个TextureRegion
猜你喜欢
  • 2019-02-14
  • 2014-09-24
  • 2013-10-07
  • 1970-01-01
  • 2022-11-05
  • 2017-10-09
  • 1970-01-01
  • 2013-05-28
  • 1970-01-01
相关资源
最近更新 更多