如何在 ARCore 中将自定义图像放在 3D 球体上
How do I put custom image on 3D Sphere in 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 并且颜色为红色,那么整个事情都可以正常工作(即我可以看到球体)
我必须在这里更改什么才能看到上面有地球纹理的球体?
好的,我得到了这个问题的答案。它不接受 jpg 文件,但接受 png 文件。奇怪的东西!
目前Google Sceneform 1.8
支持以下格式的3D资源:.obj
、.glTF
不支持动画)和 .fbx
有或没有动画。支持的纹理格式为:.mtl
、.bin
、.png
和 .jpg
.
要导入带有纹理的新 3D 资产,请按照下列步骤操作:
验证您项目的应用程序文件夹是否包含示例数据文件夹。要创建文件夹,右键单击项目中的应用程序文件夹 window,然后 select New
> Sample Data Directory
.
sampledata 文件夹是您的 Android Studio 项目的一部分,但其内容不会包含在您的 APK 中。复制您的 3D 模型源资产文件(.obj
、.fbx
或 .gltf
)及其所有依赖项,格式如下:
.mtl
.bin
.png
.jpg
进入 sampledata 文件夹。
Do not copy these source files into your project's assets or res
folder, as this will cause them to be included in your APK unnecessarily. Right click the 3D model source asset and select Import Sceneform Asset
to begin the import process.
应用程序 build.gradle
中的 sceneform.asset()
条目使用这些值,并确定 .sfa
和 .sfb
– ascii 和二进制资产定义 – 文件(以及它们相应的纹理文件 .sfm
)将在您的项目中生成。如果您是第一次导入模型,请使用默认值。
希望这对您有所帮助。
以下是我构建并显示 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 并且颜色为红色,那么整个事情都可以正常工作(即我可以看到球体)
我必须在这里更改什么才能看到上面有地球纹理的球体?
好的,我得到了这个问题的答案。它不接受 jpg 文件,但接受 png 文件。奇怪的东西!
目前Google Sceneform 1.8
支持以下格式的3D资源:.obj
、.glTF
不支持动画)和 .fbx
有或没有动画。支持的纹理格式为:.mtl
、.bin
、.png
和 .jpg
.
要导入带有纹理的新 3D 资产,请按照下列步骤操作:
验证您项目的应用程序文件夹是否包含示例数据文件夹。要创建文件夹,右键单击项目中的应用程序文件夹 window,然后 select New
> Sample Data Directory
.
sampledata 文件夹是您的 Android Studio 项目的一部分,但其内容不会包含在您的 APK 中。复制您的 3D 模型源资产文件(.obj
、.fbx
或 .gltf
)及其所有依赖项,格式如下:
.mtl
.bin
.png
.jpg
进入 sampledata 文件夹。
Do not copy these source files into your project's assets or
res
folder, as this will cause them to be included in your APK unnecessarily. Right click the 3D model source asset and selectImport Sceneform Asset
to begin the import process.
应用程序 build.gradle
中的 sceneform.asset()
条目使用这些值,并确定 .sfa
和 .sfb
– ascii 和二进制资产定义 – 文件(以及它们相应的纹理文件 .sfm
)将在您的项目中生成。如果您是第一次导入模型,请使用默认值。
希望这对您有所帮助。