Untitled
unknown
kotlin
2 years ago
6.5 kB
61
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