Método del punto del proyecto: convirtiendo rawFeaturePoint a Espacio de Pantalla.
Hola a todos, estoy tratando de entender los valores que se me devuelven cuando uso la función projectPoint
de ARKit.
Mi objetivo es tomar un punto, p = (x, y, z)
, donde todos los valores de la tupla están en el rango [-1, 1]
y convertirlo en p' = (x', y')
, donde todos los valores del par están en el rango [0,1]
, es decir, proyectar desde el espacio mundial al espacio de pantalla/imagen.
Sé que arframe.camera.imageResolution = (1920.0, 1440.0)
,
y sé que el tamaño de mi pantalla es (390.0, 844.0)
.
Entonces, cuando uso la función, escribo: arframe.camera.projectPoint(point: p, orientation: .portrait, viewportSize: arframe.camera.imageResolution)
Esto devuelve (x, y)
, pero sucede que a veces x > 1440.0
y y > 1920.0
.
Además, a veces x
e y
son valores negativos.
Estoy confundido acerca de cómo la función devuelve valores que son mayores que el tamaño de la ventana gráfica que le dimos. También estoy confundido acerca de por qué los valores mismos son negativos.
La documentación proporcionada por Apple indica que la función “devuelve la proyección de un punto desde el espacio tridimensional detectado por ARKit al espacio bidimensional de una vista que representa la escena”.
¿Qué significa más explícitamente “espacio bidimensional de una vista que representa la escena”?
davy.ai
Entendiendo la función
projectPoint
de ARKitComo experto en IT especializado en Swift, SceneKit y ARKit, puedes ayudar a aclarar los valores confusos devueltos por la función
projectPoint
en ARKit.El objetivo
El objetivo de la función
projectPoint
es proyectar un puntop = (x, y, z)
del espacio mundial al espacio de pantalla/imágen, resultando enp' = (x', y')
donde ambos valores en el par están en el rango[0, 1]
.Los parámetros
La función toma tres parámetros:
point
– el punto que se va a proyectarorientation
– la orientación de la pantalla del dispositivoviewportSize
– el tamaño del viewport en el que se renderiza la pantallaEn el ejemplo proporcionado,
arframe.camera.imageResolution = (1920.0, 1440.0)
y el tamaño de la pantalla es(390.0, 844.0)
.Los valores devueltos
La función devuelve los valores
(x, y)
para el punto proyectado. Sin embargo, puede ser el caso de quex > 1440.0
yy > 1920.0
a veces, y otras veces,x
ey
son valores negativos.La confusión
Como experto en IT, es posible que estés confundido acerca de cómo la función devuelve valores mayores que el tamaño del viewport proporcionado, y por qué los propios valores a veces son negativos.
Entendiendo el “espacio 2D de una vista que renderiza la escena”
Según la documentación proporcionada por Apple, la función
projectPoint
“devuelve la proyección de un punto desde el espacio 3D del mundo detectado por ARKit hacia el espacio 2D de una vista que renderiza la escena”.El “espacio 2D de una vista que renderiza la escena” se refiere al espacio 2D de la vista en la que se renderiza tu escena ARKit. Esto podría ser una
UIView
,SKView
u otro tipo de vista en la que se muestra la escena.En otras palabras, la función proyecta el punto 3D en un plano 2D dentro de la vista en la que se dibuja la escena. Este plano puede ser más grande que el tamaño del viewport proporcionado y los valores devueltos pueden ser negativos si el punto proyectado está fuera de la pantalla.