I have been trying to implement a 3D model viewer with mesh selection by referring to this project – https://github.com/SceneView/sceneform-android/tree/master/samples/3d-model-viewer.
Unfortunately, I am not able to get the child entity click on click listeners.
Here is my code
<code>class MainFragment : Fragment(R.layout.fragment_main){ /*GestureDetector.OnGestureListener {*/
private lateinit var sceneView: SceneView
private lateinit var loadingView: View
private lateinit var modelInstance: ModelInstance
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
sceneView = view.findViewById(R.id.sceneView)
loadingView = view.findViewById(R.id.loadingView)
viewLifecycleOwner.lifecycleScope.launch {
val modelFile = "models/truck.glb"
modelInstance = sceneView.modelLoader.createModelInstance(modelFile)
val modelNode = ModelNode(
modelInstance = modelInstance,
centerOrigin = Position(x = 0.0f, y = 0.0f, z = 0.0f)
)
modelNode.scale = Scale(.025f)
sceneView.addChildNode(modelNode)
modelNode.nodes[0].scale
// sceneView.onGestureListener = this
sceneView.onTouchEvent = { e,hitresult ->
Log.e("TAG", "onViewCreated: ", )
false
}
loadingView.isGone = true
}
</code>
<code>class MainFragment : Fragment(R.layout.fragment_main){ /*GestureDetector.OnGestureListener {*/
private lateinit var sceneView: SceneView
private lateinit var loadingView: View
private lateinit var modelInstance: ModelInstance
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
sceneView = view.findViewById(R.id.sceneView)
loadingView = view.findViewById(R.id.loadingView)
viewLifecycleOwner.lifecycleScope.launch {
val modelFile = "models/truck.glb"
modelInstance = sceneView.modelLoader.createModelInstance(modelFile)
val modelNode = ModelNode(
modelInstance = modelInstance,
centerOrigin = Position(x = 0.0f, y = 0.0f, z = 0.0f)
)
modelNode.scale = Scale(.025f)
sceneView.addChildNode(modelNode)
modelNode.nodes[0].scale
// sceneView.onGestureListener = this
sceneView.onTouchEvent = { e,hitresult ->
Log.e("TAG", "onViewCreated: ", )
false
}
loadingView.isGone = true
}
</code>
class MainFragment : Fragment(R.layout.fragment_main){ /*GestureDetector.OnGestureListener {*/
private lateinit var sceneView: SceneView
private lateinit var loadingView: View
private lateinit var modelInstance: ModelInstance
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
sceneView = view.findViewById(R.id.sceneView)
loadingView = view.findViewById(R.id.loadingView)
viewLifecycleOwner.lifecycleScope.launch {
val modelFile = "models/truck.glb"
modelInstance = sceneView.modelLoader.createModelInstance(modelFile)
val modelNode = ModelNode(
modelInstance = modelInstance,
centerOrigin = Position(x = 0.0f, y = 0.0f, z = 0.0f)
)
modelNode.scale = Scale(.025f)
sceneView.addChildNode(modelNode)
modelNode.nodes[0].scale
// sceneView.onGestureListener = this
sceneView.onTouchEvent = { e,hitresult ->
Log.e("TAG", "onViewCreated: ", )
false
}
loadingView.isGone = true
}
In this hitresult always returns me the main entity, not the child entity. How can we get the child entity to do some modification to the specific clicked area?