Estoy estudiando las Arcore referencias , Desarrollar , hacer el curso de Coursera , y de leer, comprender y aprender de las muestras .
Pero todavía falta alguna definición con algunos ejemplos reales de uso.
¿Qué es una sesión? Cada vez que necesito un uso Arcore necesito una sesión? Sesión siempre tiene una cámara de conexión para que pueda ver y dibujar / procesador de mis modelos en 3D en la pantalla? ¿Puedo hacer esto sin una sesión?
Cámara tiene un getPose y marco tiene un GetPose, ¿cuáles son las Diferencias entre ellos?
Pensé en hacer esta división preguntas, pero de alguna manera sé que todos ellos están conectados. Sesiones, CameraAr, Marco y pose.
sobre ArSession
ArSession
es el elemento más crucial en la AR rompecabezas . Sesión administra el estado de sistema de RA y maneja el ciclo de vida de la sesión. Clase de sesión es el principal punto de entrada a la API de Arcore. Esta clase permite al usuario crear una sesión, configura, iniciar o detener y, lo más importante, recibirArFrames
que permiten el acceso a laARCamera
imagen y el dispositivo de Pose .Para utilizar Arcore se necesita una
ArSession
. Arcore no hace que los modelos 3D (Renderables
). Este trabajo es paraSceneform
marco .
El ejemplo de código:
private Session mSession;
Config config = new Config(mSession);
if (!mSession.isSupported(config)) {
showSnackbarMessage("This phone doesn't support AR", true);
}
mSession.configure(config);
También la configuración de la sesión puede incluir clases anidadas:
- Config.AugmentedFaceMode (selecciona el comportamiento del
Augmented Faces
subsistema) - Config.CloudAnchorMode (El modo de anclaje nube en
Config
) - Config.FocusMode (selecciona el comportamiento deseado del
camera focus
subsistema) - Config.LightEstimationMode (Seleccione el comportamiento del
lighting estimation
subsistema) - Config.PlaneFindingMode (Seleccione el comportamiento del
plane detection
subsistema) - Config.UpdateMode (selecciona el comportamiento de los
update()
)
sobre Pose
Pose
representa una transformación rígida inmutable de un espacio de coordenadas a otro. Tal como se establece a partir de todas las API Arcore, plantea siempre describen la transformación del espacio de coordenadas local del objeto al espacio de coordenadas mundo. La transformación se define utilizando una rotación de cuaternión sobre el origen, seguido de una traducción.
El ejemplo de código:
float[] position = { 0, 0, -2.2 }; // { x, y, z } position
float[] rotation = { 0, 0, 0, 1 }; // { x, y, z, w } quaternion rotation
Session session = arFragment.getArSceneView().getSession();
Anchor myAnchor = session.createAnchor(new Pose(position, rotation));
sobre ARCamera
ARCamera
representa una cámara virtual, que determina la perspectiva a través de la cual se ve la escena. Si la cámara es parte de unaArSceneView
, entonces la cámara sigue automáticamente el Pose cámara de Arcore. ARCamera es un objeto vivido largo y las propiedades de la cámara se actualiza cada vez queSession.update()
se llama.Camera
clase proporciona información sobre la cámara que se utiliza para capturar imágenes e información adicional dentro de cada unoArFrame
.
El ejemplo de código:
// Shared camera access with ARCore
sharedSession = new Session(this, EnumSet.of(Session.Feature.SHARED_CAMERA))
sharedCamera = sharedSession.getSharedCamera();
cameraId = sharedSession.getCameraConfig().getCameraId();
sobre ArFrame
Cuando la comprensión de Arcore de los cambios en el entorno, se ajusta su modelo del mundo para mantener la coherencia. Cuando esto sucede, la ubicación numérica (coordenadas) de la
ARCamera
yARAnchors
puede cambiar significativamente para mantener las posiciones relativas apropiadas de las ubicaciones físicas que represent.These cambios significa que cadaArFrame
debe ser considerado para estar en una completamente único mundo espacio de coordenadas . Las coordenadas numéricas deARAnchors
y elARCamera
nunca debe ser usado fuera del marco de la prestación durante los cuales fueron recuperados.Cada
ArFrame
conserva la siguiente información acerca del estado de Arcore ::
- imagen RGB en sí
- estado de seguimiento
- La pose de la cámara con respecto al mundo
- parámetros de iluminación estimados
- La información sobre cambios a los objetos (como nubes de puntos)
El ejemplo de código:
private void onUpdateFrame(FrameTime frameTime) {
Frame frame = arFragment.getArSceneView().getArFrame();
// .............
}