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



使用Android Arcore样品播放时,我注意到样本使用下一行:

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

andy.png是png文件纹理,要在 andy.obj 3d对象上"拉伸"。

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

但是,当从poly下载OBJ文件时,我会获取OBJ mtl文件。

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

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

。ARCORE样本中使用的OBJ加载库非常基本,因此您必须找到更好的库或自己实现OBJ文件加载。另一个选择是将3D库用于Android,该库已经提供了模型加载并隐藏了低级OpenGL的东西。有关这些高级库的示例

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

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

以及以下支持的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;
}

希望这会有所帮助。

最新更新