Untitled
unknown
plain_text
a year ago
4.6 kB
11
Indexable
@Composable
fun ARSceneContent(latlongpointslist: ArrayList<LatLng>) {
Box(modifier = Modifier.fillMaxSize()) {
val engine = rememberEngine()
val modelLoader = rememberModelLoader(engine)
val materialLoader = rememberMaterialLoader(engine)
val cameraNode = rememberARCameraNode(engine)
val childNodes = rememberNodes()
val view = rememberView(engine)
val collisionSystem = rememberCollisionSystem(view)
var planeRenderer by remember { mutableStateOf(true) }
var trackingFailureReason by remember {
mutableStateOf<TrackingFailureReason?>(null)
}
var frame by remember { mutableStateOf<Frame?>(null) }
var destinationAnchor: Anchor? = null
// Persistent list to hold all arrow nodes
val arrowNodes = mutableListOf<AnchorNode>()
ARScene(
modifier = Modifier.fillMaxSize(),
childNodes = childNodes,
engine = engine,
view = view,
modelLoader = modelLoader,
collisionSystem = collisionSystem,
sessionConfiguration = { session, config ->
config.depthMode =
when (session.isDepthModeSupported(Config.DepthMode.AUTOMATIC)) {
true -> Config.DepthMode.AUTOMATIC
else -> Config.DepthMode.DISABLED
}
config.instantPlacementMode = Config.InstantPlacementMode.LOCAL_Y_UP
config.lightEstimationMode =
Config.LightEstimationMode.ENVIRONMENTAL_HDR
config.geospatialMode = Config.GeospatialMode.ENABLED
},
cameraNode = cameraNode,
planeRenderer = planeRenderer,
onTrackingFailureChanged = {
trackingFailureReason = it
},
onSessionUpdated = {session: Session, updatedFrame: Frame ->
frame = updatedFrame
// if (childNodes.isEmpty()) {
// updatedFrame.getUpdatedPlanes()
// .firstOrNull { it.type == Plane.Type.HORIZONTAL_UPWARD_FACING }
// ?.let { it.createAnchorOrNull(it.centerPose) }?.let {
// anchor ->
// childNodes += createAnchorNode(
// engine = engine,
// modelLoader = modelLoader,
// materialLoader = materialLoader,
// anchor = anchor
// )
// }
// }
},
onSessionCreated = { session ->
val earth = session.earth
if (earth?.earthState == Earth.EarthState.ENABLED) {
// Ensure we only add anchors once.
// Log.d("tag", ": "+arrowNodes.size)
if (arrowNodes.isEmpty()) {
latlongpointslist.forEach { point ->
val latLng = latlongpointslist.first()
val anchor = createDestinationAnchor(earth, latLng)
anchor?.let {
val anchorNode = createAnchorNode(
engine = engine,
modelLoader = modelLoader,
materialLoader = materialLoader,
anchor = anchor
)
childNodes += anchorNode
arrowNodes.add(anchorNode)
// Log.d("tag", "childNodes: "+childNodes.size)
}
}
}else{
Log.d("tag", "ARSceneContent:null "+arrowNodes.size)
}
} else {
Log.e("ARScene", "Earth state is not enabled. Cannot create anchors.")
}
},
)
}
}Editor is loading...
Leave a Comment