Android 如何在sceneform中更改可渲染颜色/纹理?

Android 如何在sceneform中更改可渲染颜色/纹理?,android,textures,augmented-reality,arcore,sceneform,Android,Textures,Augmented Reality,Arcore,Sceneform,我正在构建一个使用AR的Android应用程序,为此我使用了sceneform包。我显示了一个3D模型,通过从外部URI下载相应的.sfb,可以获得该模型的ModelRenderable。我需要它能够改变模型的颜色时,触摸某个按钮。我已经尝试了一千种方法,但没有任何运气。有没有简单的方法可以做到这一点?非常感谢 您是否尝试设置新材质(单击模型时) 您还可以更改可渲染的材质。由于可渲染的所有实例共享同一个模型实例,因此最好在更改材质之前进行复制。否则,所有其他节点也会受到更改的影响 val ren

我正在构建一个使用AR的Android应用程序,为此我使用了sceneform包。我显示了一个3D模型,通过从外部URI下载相应的.sfb,可以获得该模型的ModelRenderable。我需要它能够改变模型的颜色时,触摸某个按钮。我已经尝试了一千种方法,但没有任何运气。有没有简单的方法可以做到这一点?非常感谢

您是否尝试设置新材质(单击模型时)

您还可以更改可渲染的材质。由于可渲染的所有实例共享同一个模型实例,因此最好在更改材质之前进行复制。否则,所有其他节点也会受到更改的影响

val renderableCopy = originalRenderable.makeCopy()
val changedMaterial = renderableCopy.material.makeCopy()
changedMaterial.setFloat3("baseColorTint", Color(android.graphics.Color.rgb(0,255,0)))
renderableCopy.material = changedMaterial

您是否必须更改baseColor或baseColorTint取决于您的SFA文件。颜色是使用baseColor还是baseColorTint设置的。

您也可以从.sfb模型调用mtl id,并在其中传递纹理。

您好!该模型是从obj和mtl文件获取的简单.sfb。实际上,没有涉及纹理,只需使用colo即可r、 奇怪的是,即使我使用makeCopy并成功地更改了颜色,它也会应用于场景中的每个对象,而不是具体的对象=(而是克隆可渲染对象本身)me@AndreySuvorov我在源代码中添加了这一步骤以使其更加清晰。你能举例说明如何做到这一点吗?