如何在ARCore的3D Sphere上放置自定义图像

时间:2018-07-24 07:26:17

标签: android augmented-reality arcore

以下是我用于构建3D地球并显示它的代码:

com.google.ar.sceneform.rendering.Texture.Builder builder= com.google.ar.sceneform.rendering.Texture.builder();
builder.setSource(context,R.drawable.earth);
builder.build().thenAccept(texture ->
        MaterialFactory.makeOpaqueWithTexture(context, texture).
                thenAccept(material -> {
                  earthSphereRenderable =
                          ShapeFactory.makeSphere(0.1f, new Vector3(0.0f, 0.0f, 0.0f), material);
                  Toast.makeText(context,"All done",Toast.LENGTH_SHORT).show();})
);

Toast消息即将到来,但我看不到任何物体。请注意,R.drawable.earth是我放入其中的Earth.jpg文件,我想在AR中显示它。

这是我渲染的地方

cornerNode = new Node();
    cornerNode.setParent(this);
    cornerNode.setLocalPosition(localPosition);
    cornerNode.setRenderable(earthSphereRenderable);

此外,如果我将makeOpaqueWithTexture替换为makeOpaqueWithColor,但将颜色设置为Red,则表示整个过程工作正常(即,我可以看到球体)

为了能够看到上面带有地球纹理的球体,我必须在此处进行哪些更改?

2 个答案:

答案 0 :(得分:1)

目前Google Sceneform 1.8支持以下格式的3D资源: .obj .glTF ,但不支持动画)和 .fbx (带有或不带有动画)。支持的纹理格式为:.mtl.bin.png.jpg

要导入具有纹理的新 3D资源,请执行以下步骤:

验证项目的app文件夹中是否包含sampledata文件夹。要创建文件夹,请在“项目”窗口中右键单击应用程序文件夹,然后选择New> Sample Data Directory

sampledata文件夹是您的Android Studio项目的一部分,但其内容不会包含在您的APK中。复制3D模型源资产文件(.obj.fbx.gltf)及其所有依赖项,格式如下:

  • .mtl
  • .bin
  • .png
  • .jpg

进入sampledata文件夹。

  

请勿将这些源文件复制到项目的资源或res文件夹中,因为这将导致它们不必要地包含在APK中。右键单击3D模型源资源,然后选择 Import Sceneform Asset 开始导入过程。

该值由应用程序的 sceneform.asset() 中的build.gradle条目使用,并确定.sfa.sfb的位置-ASCII和二进制资产定义–文件(及其对应的纹理文件.sfm)将在您的项目中生成。如果您是第一次导入模型,请使用默认值。

希望这会有所帮助。

答案 1 :(得分:0)

好的,我得到了答案。它不接受jpg文件,但接受png文件。奇怪的东西!