1

以下是我构建 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);

此外,如果我用 makeOpaqueWithColor 替换 makeOpaqueWithTexture 并且颜色为红色,那么整个事情工作正常(即我可以看到球体)

为了能够看到上面有地球纹理的球体,我必须在这里改变什么?

4

2 回答 2

1

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

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

验证项目的 app 文件夹是否包含 sampledata 文件夹。要创建文件夹,请右键单击 Project 窗口中的 app 文件夹,然后选择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如果您是第一次导入模型,请使用默认值。

希望这可以帮助。

于 2019-04-25T16:25:25.713 回答
0

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

于 2018-07-25T03:41:49.463 回答