8

在使用 Android ARCore Samples 时,我注意到该示例使用了下一行:

mVirtualObject.createOnGlThread(this, "andy.obj", "andy.png"); 

andy.pngandy.obj是要在3D 对象上“拉伸”的 PNG 文件纹理。

我想用Google Poly中的项目替换模型和 PNG 文件。

但是当从 Poly 下载 obj 文件时,我得到了 obj +mtl文件。

我猜这mlt是像PNG这样的纹理文件,但我不能使用它。

我可以把它转换成PNG文件吗?mtl还是在 ARCore 中使用文件?

4

2 回答 2

3

.*mtl 是从 OBJ 引用的材质文件,它定义了诸如纹理和闪电配置之类的东西。ARCore 示例中使用的 OBJ 加载库非常基础,因此您必须找到更好的库或自行实现 OBJ 文件加载。另一种选择是使用已经提供模型加载并隐藏低级 OpenGL 内容的 Android 3D 库。有关这些高级库的示例,请参见https://stackoverflow.com/a/48456836/385536

于 2017-12-29T09:36:22.037 回答
0

对于ARCore 1.8/Sceneform 1.8应用程序,您可以使用以下 3D 文件格式:

  • .obj
  • .fbx
  • .glTF
  • .glb
  • .sfa(ASCII 场景形式资产定义)
  • .sfb(二进制场景形式资产定义)

以及以下支持的texture/material文件格式:

  • .mtl
  • 。垃圾桶
  • .png
  • .jpg
  • .sfm
  • 。垫

如果您无法读取相应的mtl纹理,只需将其转换/替换为其他支持的格式。您可以这样使用obj资产:

@Override
protected Void doInBackground(Void... voids) {
    try {
        mVirtualObject.createOnGlThread(this, 
                                        "andy.obj", 
                                        "andy.png");
        mVirtualObject.setBlendMode(MtlRenderer.BlendMode.Shadow);
        mVirtualObject.setMaterialProperties(1.0f, 0.0f, 0.0f, 1.0f)
        mVirtualObjectShadow.createOnGlThread(this, 
                                              "andy_shadow.fbx", 
                                              "andy_shadow.sfm");
        mVirtualObjectShadow.setBlendMode(MtlRenderer.BlendMode.Shadow);
        mVirtualObjectShadow.setMaterialProperties(1.0f, 0.0f, 0.0f, 1.0f);
    } catch (Exception e) {
        Log.e(TAG, "Failed to read 3D asset file");
    }
    return null;
}

希望这可以帮助。

于 2019-04-08T07:55:25.197 回答