使用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
文件?
答案 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文件格式:
以及以下受支持的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;
}
希望这会有所帮助。