如何使用sceneform android更改三维模型特定部分的颜色

如何使用sceneform android更改三维模型特定部分的颜色,android,sceneform,Android,Sceneform,我正在尝试使用sceneform SDK创建示例应用程序。我已经成功地将3d模型应用到应用程序中。现在我想更改特定部分的3D对象的颜色,而不是整个对象 这就是我试过的 private fun renderLocalObject() { skuProgressBar.setVisibility(View.VISIBLE) ModelRenderable.builder() .setSource(this, Uri.parse(localModel))

我正在尝试使用sceneform SDK创建示例应用程序。我已经成功地将3d模型应用到应用程序中。现在我想更改特定部分的3D对象的颜色,而不是整个对象

这就是我试过的

  private fun renderLocalObject() {

    skuProgressBar.setVisibility(View.VISIBLE)
    ModelRenderable.builder()
        .setSource(this, Uri.parse(localModel))
        .setRegistryId(localModel)
        .build()
        .thenAccept { modelRenderable: ModelRenderable ->
            skuProgressBar.setVisibility(View.GONE)
            addNodeToScene(modelRenderable)
        }
        .exceptionally { throwable: Throwable? ->
            var message: String?
            message = if (throwable is CompletionException) {
                skuProgressBar.setVisibility(View.GONE)
                "Internet is not working"
            } else {
                skuProgressBar.setVisibility(View.GONE)
                "Can't load Model"
            }
            val mainHandler = Handler(Looper.getMainLooper())
            val finalMessage: String = message
            val myRunnable = Runnable {
                AlertDialog.Builder(this)
                    .setTitle("Error")
                    .setMessage(finalMessage + "")
                    .setPositiveButton("Retry") { dialogInterface: DialogInterface, _: Int ->
                        renderLocalObject()
                        dialogInterface.dismiss()
                    }
                    .setNegativeButton("Cancel") { dialogInterface, _ -> dialogInterface.dismiss() }
                    .show()
            }
            mainHandler.post(myRunnable)
            null
        }
}
private fun addNodeToScene(模型:ModelRenderable){ if(sceneView!=null){

val renderableCopy=model.makeCopy()
val changedMaterial=renderableCopy.material.makeCopy()
changedMaterial.setFloat4(
MaterialFactory.MATERIAL\u颜色,
com.google.ar.sceneform.rendering.Color(Color.rgb(0,51,0))
)
renderableCopy.material=changedMaterial
val transformationSystem=makeTransformationSystem()
var DragTransformalNode=DragTransformalNode(1f,转换系统)
dragTransformableNode?.renderable=renderableCopy
for(DragTransformalNode.children中的子对象){
Log.d(“支票”,“儿童$child”)
}
sceneView.getScene().addChild(DragTransformalNode)
DragTransformalNode?.select()
sceneView.getScene()
.addOnPeekTouchListener{hitTestResult:hitTestResult?,motionEvent:motionEvent?->
transformationSystem.onTouch(
点击测试结果,
运动事件
)
}
}
}

Hi-any soution for this?有解决方案吗?Hi-any soution for this?有解决方案吗?
        val renderableCopy = model.makeCopy()
        val changedMaterial = renderableCopy.material.makeCopy()

        changedMaterial.setFloat4(
            MaterialFactory.MATERIAL_COLOR,
            com.google.ar.sceneform.rendering.Color(Color.rgb(0, 51, 0))
        )


        renderableCopy.material = changedMaterial

        val transformationSystem = makeTransformationSystem()
        var dragTransformableNode = DragTransformableNode(1f, transformationSystem)
        dragTransformableNode?.renderable = renderableCopy

        for (child in dragTransformableNode.children) {
            Log.d("<>check","child $child")
        }

        sceneView.getScene().addChild(dragTransformableNode)
        dragTransformableNode?.select()


        sceneView.getScene()
            .addOnPeekTouchListener { hitTestResult: HitTestResult?, motionEvent: MotionEvent? ->
                transformationSystem.onTouch(
                    hitTestResult,
                    motionEvent
                )
            }
    }
}