Untitled

 avatar
unknown
kotlin
a year ago
6.5 kB
53
Indexable
package io.github.sceneview.sample.araugmentedimage

import android.graphics.BitmapFactory
import android.os.Bundle
import android.view.View
import android.widget.Toast
import androidx.fragment.app.Fragment
import com.google.ar.sceneform.rendering.ViewAttachmentManager
import io.github.sceneview.ar.ARSceneView
import io.github.sceneview.ar.arcore.addAugmentedImage
import io.github.sceneview.ar.arcore.getUpdatedAugmentedImages
import io.github.sceneview.ar.node.AugmentedImageNode
import io.github.sceneview.math.Position
import io.github.sceneview.math.Scale
import io.github.sceneview.node.ModelNode
import io.github.sceneview.node.ViewNode

class MainFragment : Fragment(R.layout.fragment_main) {

    lateinit var sceneView: ARSceneView

    val augmentedImageNodes = mutableListOf<AugmentedImageNode>()

    lateinit var viewAttachmentManager: ViewAttachmentManager

    // TODO: Restore when
//    var qrCodeNode: VideoNode? = null

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        sceneView = view.findViewById(R.id.sceneView)
        viewAttachmentManager = ViewAttachmentManager(requireContext(), sceneView)

        sceneView.apply {
            configureSession { session, config ->
                config.addAugmentedImage(
                    session, "rabbit",
                    requireContext().assets.open("augmentedimages/rabbit.jpg")
                        .use(BitmapFactory::decodeStream)
                )
                config.addAugmentedImage(
                    session, "qrcode",
                    requireContext().assets.open("augmentedimages/qrcode.png")
                        .use(BitmapFactory::decodeStream)
                )
            }
            onSessionUpdated = { session, frame ->
                frame.getUpdatedAugmentedImages().forEach { augmentedImage ->
                    if (augmentedImageNodes.none { it.imageName == augmentedImage.name }) {
                        val augmentedImageNode = AugmentedImageNode(engine, augmentedImage).apply {
                            when (augmentedImage.name) {
                                "rabbit" ->
//                                    addChildNode(
//                                    ModelNode(
//                                        modelInstance = modelLoader.createModelInstance(
//                                            assetFileLocation = "models/rabbit.glb"
//                                        ),
//                                        scaleToUnits = 0.1f,
//                                        centerOrigin = Position(0.0f)
//                                    )
//                                )
                                {
                                    val node = ViewNode(
                                        engine = sceneView.engine,
                                        modelLoader = sceneView.modelLoader,
                                        viewAttachmentManager = viewAttachmentManager
                                    )
                                    node.apply {
                                        loadView(
                                            requireContext(),
                                            R.layout.node_text_view
                                        )
                                        quaternion = dev.romainguy.kotlin.math.Quaternion.fromEuler(-90f, 0f, 0f)
                                        isEnabled = true
                                        scale = Scale(5f)
                                        Toast.makeText(requireContext(), "IMAGE DETECTED", Toast.LENGTH_SHORT).show()
                                    }
                                    sceneView.addChildNode(node)
                                }

                                "qrcode" -> {}
                                // TODO: Wait for VideoNode to come back
//                                    addChildNode(VideoNode(
//                                    materialLoader = materialLoader,
//                                    player = MediaPlayer().apply {
//                                        setDataSource(
//                                            requireContext(),
//                                            Uri.parse("https://sceneview.github.io/assets/videos/ads/ar_camera_app_ad.mp4")
//                                        )
//                                        isLooping = true
//                                        setOnPreparedListener {
//                                            if (augmentedImage.isTracking) {
//                                                start()
//                                            }
//                                        }
//                                        prepareAsync()
//                                    }
//                                ).also { qrCodeNode ->
//                                    onTrackingStateChanged = { trackingState ->
//                                        when (trackingState) {
//                                            TrackingState.TRACKING -> {
//                                                if (!qrCodeNode.player.isPlaying) {
//                                                    qrCodeNode.player.start()
//                                                }
//                                            }
//
//                                            else -> {
//                                                if (qrCodeNode.player.isPlaying) {
//                                                    qrCodeNode.player.pause()
//                                                }
//                                            }
//                                        }
//                                    }
//                                })
                            }
                        }
                        addChildNode(augmentedImageNode)
                        augmentedImageNodes += augmentedImageNode
                    }
                }
            }
        }
    }
    override fun onResume() {
        super.onResume()
        viewAttachmentManager.onResume()
    }

    override fun onPause() {
        super.onPause()
        viewAttachmentManager.onPause()
    }
}
Editor is loading...
Leave a Comment