将ARCore与OBJ和MTL文件一起使用

时间:2017-12-24 23:16:34

标签: android augmented-reality arcore mtl-file poly-google

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

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

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

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

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

我猜mlt是像PNG一样的纹理文件,但我无法使用它。

我可以将其转换为PNG文件吗?或者在ARCore中使用mtl文件?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

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

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

  • .mtl
  • .bin
  • .png
  • .jpg
  • .sfm
  • .mat

如果您无法读取对应的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;
}

希望这会有所帮助。