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

Posted

技术标签:

【中文标题】将 ARCore 与 OBJ 和 MTL 文件一起使用【英文标题】:Use ARCore with OBJ and MTL files 【发布时间】:2018-06-06 11:22:18 【问题描述】:

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

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 文件?

【问题讨论】:

如果我没看错的话,ARCore 确实支持在 Java 中直接渲染 .obj 文件? @ManuelTS 是的,支持 【参考方案1】:

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

【讨论】:

【参考方案2】:

对于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;

希望这会有所帮助。

【讨论】:

如果我没看错的话,ARCore 确实支持在 Java 中直接渲染 .obj 文件? 不确定。我没有直接在 ARCore Java 中尝试过.obj。这只是为了举例。我通常遵循官方的做法:developers.google.com/ar/develop/java/sceneform/import-assets

以上是关于将 ARCore 与 OBJ 和 MTL 文件一起使用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ARCore 中调整对象的大小?

如何导入 3D 场景(.obj 文件和 .mtl 文件)

如何将 obj 和 mtl 文件导入到 three.js

OBJ 模型文件与MTL材质文件 介绍

有没有办法用纹理一次上传 obj 和 mtl 文件

如何将带有 mtl 和纹理的 obj 上传到存储桶?