es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo congelo una escena de AR en ARKit y luego restauro la escena en otro lugar – Swift, XCode?

Tengo una escena de realidad aumentada (construida como un nodo con nodos secundarios) en la que quiero que el usuario camine dentro de ella.
Debido a que puede ser grande, agregué un botón de pausa en la esquina para que si el usuario encuentra un obstáculo en el mundo real, solo tenga que presionar y mantener ese botón para congelar la escena, moverse a otro lugar en el mundo real y cuando se libera el botón, la escena se movería tal como estaba a esa nueva ubicación, manteniendo la misma posición y rotación relativa dentro de esa escena.

Lo que hice es muy simple. Cuando se toca el botón, simplemente hice:

sceneView.session.pause()

Y cuando se levanta el botón, ejecuto:

sceneView.session.run(configuration)

Esto parecía funcionar.
Sin embargo, después de hacer clic y moverme una o dos veces más y regresar a donde estaba antes, toda mi escena de realidad aumentada simplemente saltaba hacia atrás a su ubicación anterior en el mundo real. Por lo tanto, se congeló y apareció en la nueva ubicación durante uno o dos segundos, pero luego saltó de vuelta.

Intenté reanudar la sesión con varias de las opciones disponibles.
Si ejecutaba:

sceneView.session.run(configuration, options: [.resetTracking])

toda la escena se movería a la nueva ubicación, pero se establecería en su posición y rotación inicial como si estuviera parado en (0,0,0) cuando inicié la aplicación, pero ahora me moví a la nueva ubicación. En otras palabras, perdió la ubicación y rotación actual en la que me encontraba cuando presioné el botón de pausa y simplemente restableció la escena.

Todas las demás opciones que intenté tuvieron el mismo efecto como si no hubiera agregado ninguna opción.

Debo agregar que no estoy utilizando ningún ancla (hasta ahora) ni ningún rayo de lanzamiento.
No intenté diferentes combinaciones de esas opciones (excepto removerAnclasExistentes y resetTracking juntos), pero dudo que eso ayude. ¿Estoy equivocado?

¿Qué estoy haciendo mal?
¿Alguien tiene una solución para mi problema?
¿O tendré que grabar manualmente la posición y rotación actual cuando presione el botón de pausa y luego restaurarlos con algún cambio de posición del nodo? Esperaba poder evitar hacerlo de esta manera.
Y si necesito hacerlo manualmente, ¿algunos consejos sobre cómo lograr esto?

¡Gracias por su ayuda!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que has intentado varios enfoques diferentes para pausar y reanudar la escena de AR, pero ninguno ha funcionado como se esperaba. Parece que no estás usando anclas ni proyección de rayos, por lo que es probable que tengas que registrar manualmente la posición y rotación actual al presionar el botón de pausa y luego restaurarlas con algún cambio de posición del nodo.

    Si decides seguir esta ruta, podrías intentar usar la propiedad transform del nodo para establecer la posición y rotación. También podrías investigar el uso de la propiedad simdTransform del nodo, que te permite establecer la posición, rotación y escala del nodo.

    También es posible que debas usar una combinación de las opciones resetTracking y removeExistingAnchors al ejecutar la sesión.

    ¡Esperamos que esto te sea de ayuda!

Comments are closed.