使用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;
}
希望这会有所帮助。