以下是构建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,但颜色为红色,那么整个过程工作正常(即我可以看到球体)
为了能够看到带有地球纹理的球体,我必须在这里改变什么?
此时Google Sceneform 1.8
支持以下格式的3D资产:.obj
,不支持动画的.glTF
)和带或不带动画的.fbx
。支持的纹理格式为:.mtl
,.bin
,.png
和.jpg
。
验证项目的app文件夹是否包含sampledata文件夹。要创建文件夹,请在“项目”窗口中右键单击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
)的位置。如果您是第一次导入模型,请使用默认值。
希望这可以帮助。
好的,我得到了答案。它不接受jpg文件,但它接受png文件。奇怪的东西!