问题
I am using SceneForm Android SDK to render 3D Model in Android APP.
To display the 3D Model I am using this code below which also supports Rotating and Zooming feature in 3D Model
private fun renderLocalObject(position: Int) {
ModelRenderable.builder()
.setSource(appCompatActivity, Uri.parse(models.get(position)))
.setRegistryId(models.get(position))
.build()
.thenAccept { modelRenderable: ModelRenderable ->
addNodeToScene(modelRenderable)
}
.exceptionally { throwable: Throwable? ->
var message: String?
message = if (throwable is CompletionException) {
Logger.DebugLog("ERROR LOADING 3D", throwable.message)
"Internet is not working"
} else {
Logger.DebugLog("ERROR LOADING 3D", "FAILED TO LOAD")
"Can't load Model"
}
null
}
}
private fun addNodeToScene(model: ModelRenderable) {
if (sceneView != null) {
val transformationSystem = makeTransformationSystem()
val dragTransformableNode = DragTransformableNode(5f, transformationSystem)
dragTransformableNode.renderable = model
sceneView!!.scene.addChild(dragTransformableNode)
dragTransformableNode.select()
sceneView!!.getScene()
.addOnPeekTouchListener { hitTestResult: HitTestResult?, motionEvent: MotionEvent? ->
transformationSystem.onTouch(
hitTestResult,
motionEvent
)
when (motionEvent?.action) {
MotionEvent.ACTION_UP ->
if (hitTestResult != null) {
addDot(hitTestResult)
}
}
}
}
}
I want to draw a sphere renderable shape directly over the 3d model, but the Node is not getting stuck model.
Below is the required output
Below is the final output of my code
This is my code for adding node
private fun addDot(hitTestResult: HitTestResult){
val color = Color(.8f, 0f, 0f)
MaterialFactory.makeOpaqueWithColor(appCompatActivity, color)
.thenAccept { material->
// The sphere is in local coordinate space, so make the center 0,0,0
val sphere = ShapeFactory.makeSphere(0.05f, Vector3.zero(),
material)
val indicatorModel = Node()
indicatorModel.setParent(hitTestResult.node)
indicatorModel.worldPosition = hitTestResult.point
// indicatorModel.localPosition = Vector3(0f, 0f, -1f)
indicatorModel.renderable = sphere
// sceneView!!.getScene().addChild(indicatorModel)
}
}
Is there any way to draw shape directly over the 3d model.
来源:https://stackoverflow.com/questions/63900439/draw-renderable-shape-on-3d-model-using-sceneform-android