Untitled
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