将 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 文件格式:
以及以下支持的texture
/material
文件格式:
如果您无法读取相应的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 文件一起使用的主要内容,如果未能解决你的问题,请参考以下文章