使用ARCore与OBJ和MTL文件

9
当我尝试运行Android的ARCore示例时,发现该示例使用了以下代码:

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

1
如果我理解正确的话,ARCore是否支持在Java中直接渲染.obj文件? - ManuelTS
@ManuelTS 是的,它得到了支持。 - David
2个回答

3

.*mtl 是 OBJ 引用的材质文件,它定义了纹理和灯光等配置信息。ARCore 示例中使用的 OBJ 加载库非常基础,因此您需要找到更好的加载库或自行实现 OBJ 文件加载。另一种选择是使用适用于 Android 的 3D 库,该库已经提供了模型加载,并隐藏了底层的 OpenGL 细节。
有关这些高级库的示例,请参见https://dev59.com/Mqjka4cB1Zd3GeqPAIil#48456836


0

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

  • .obj
  • .fbx
  • .glTF
  • .glb
  • .sfa (ASCII Sceneform Asset Definition)
  • .sfb (Binary Sceneform Asset Definition)

以及以下支持的 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文件? - ManuelTS
不确定。我没有直接在ARCore Java中尝试过.obj。这只是为了举例而已。我通常遵循官方的方法:https://developers.google.com/ar/develop/java/sceneform/import-assets - Andy Jazz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接