SceneView / sceneview-android

SceneView is a 3D and AR Android Composable and View with Google Filament and ARCore. This is a Sceneform replacement in Kotlin
Apache License 2.0
758 stars 151 forks source link

Unable to place a ModelNode inside an AnchorNode with Instant Placement On #396

Closed vytran0710 closed 1 month ago

vytran0710 commented 5 months ago

Configuration and codes:

configureSession { _, config ->
            config.instantPlacementMode = Config.InstantPlacementMode.LOCAL_Y_UP
}
override fun onSingleTapUp(e: MotionEvent, node: Node?) {
        val hitResults = frame?.hitTestInstantPlacement(
            e.x,
            e.y,
            1.0F
        )
        val anchor = hitResults?.firstOrNull {
            it.isValid(depthPoint = false, point = false, instantPlacementPoint = true)
        }?.createAnchorOrNull()
        if (anchor != null) {
            createNode(anchor)
        }
    }
private fun createNode(anchor: Anchor) {
        val anchorNode = AnchorNode(
            engine = engine,
            anchor = anchor
        )
        anchorNode.addChildNode(
            ModelNode(
                modelInstance = modelLoader.createInstance(
                    modelLoader.createModel(
                        R.raw.file
                    )
                )!!
            )
        )
    }

ARSceneView is placed in a fragment

Steps to reproduce:

at io.github.sceneview.node.Node.onWorldTransformChanged(Node.kt:830)
at io.github.sceneview.node.Node.onWorldTransformChanged(Node.kt:830)
at io.github.sceneview.node.Node.onWorldTransformChanged(Node.kt:830)
at io.github.sceneview.node.Node.onWorldTransformChanged(Node.kt:830)
at io.github.sceneview.node.Node.onWorldTransformChanged(Node.kt:830)
at io.github.sceneview.node.Node.onWorldTransformChanged(Node.kt:830)
at io.github.sceneview.node.Node.onWorldTransformChanged(Node.kt:830)
at io.github.sceneview.node.Node.onWorldTransformChanged(Node.kt:830)
at io.github.sceneview.node.Node.onWorldTransformChanged(Node.kt:830)
at io.github.sceneview.node.Node.onWorldTransformChanged(Node.kt:830)
at io.github.sceneview.node.Node.onWorldTransformChanged(Node.kt:830)
at io.github.sceneview.node.Node.onWorldTransformChanged(Node.kt:830)
at io.github.sceneview.node.Node.onWorldTransformChanged(Node.kt:830)
 at io.github.sceneview.node.Node.onWorldTransformChanged(Node.kt:830)
at io.github.sceneview.node.Node.onWorldTransformChanged(Node.kt:830)
at io.github.sceneview.node.Node.onWorldTransformChanged(Node.kt:830)
at io.github.sceneview.node.Node.onWorldTransformChanged(Node.kt:830)
at io.github.sceneview.node.Node.onWorldTransformChanged(Node.kt:830)
at io.github.sceneview.node.Node.onWorldTransformChanged(Node.kt:830)
at io.github.sceneview.node.Node.onTransformChanged(Node.kt:811)
at io.github.sceneview.node.Node.setChildNodes(Node.kt:359)
at io.github.sceneview.node.Node.setParent(Node.kt:336)
at io.github.sceneview.node.ModelNode.<init>(ModelNode.kt:108)
at io.github.sceneview.node.ModelNode.<init>(ModelNode.kt:36)
akhatriST commented 5 months ago

You should try to load your model in advance before setting it on the Anchor, maybe load it in onCreate and use it like this

 private fun loadModel() {
        lifecycleScope.launch {
            sceneView.modelLoader.loadModelInstance("models/model.glb")?.let {
                model = it
            }
        }
    }

private fun createNode(anchor: Anchor) {
        val anchorNode = AnchorNode(
            engine = engine,
            anchor = anchor
        )
        anchorNode.addChildNode(
            ModelNode(
                modelInstance = model
            )
        )
    }
vytran0710 commented 3 months ago

Hi akhatriST,

Thanks for the reply I think there is a problem with the texture of my model, I loaded it without texture and then load it with color and it works