ios - Necesita una comprensión mejor y más simple de CATransform3D
calayer caanimation (3)
Aquí está mi proyecto en Swift https://github.com/paulz/PerspectiveTransform que ayuda a calcular CATransform3D e incluye aplicaciones de ejemplo y áreas de juego.
Se puede utilizar para animar la propiedad de transformación CALayer.
Consulte wiki: https://github.com/paulz/PerspectiveTransform/wiki para obtener detalles sobre cómo construir la matriz y otras posibles soluciones.
Gracias por esta pregunta, ¡me ayudó a comenzar con mi proyecto sabiendo que no solo yo tengo ese problema!
Por favor, vaya a través de las imágenes.
Este es el código que obtuve de alguna fuente en línea y transforma mi objeto. Además de eso, no entendí nada en absoluto. Soy nuevo en CATransform3D y quiero saber exactamente cómo funciona.
CATransform3D transform = CATransform3DIdentity;
transform.m34 = 1.0 / -500;
transform = CATransform3DRotate(transform, 45.0f * M_PI / 180.0f, 0, 1, 0.0f);
_bgView.layer.transform = transform;
Quiero saber cómo se ejecutó este código? ¿Por qué hemos establecido algún valor en m34? Encontré que es una especie de matriz que incluso me confunde más. Además, ¿qué significan los argumentos en CATransform3DRotate ?
Estoy tratando de entender pero no voy más allá.
Quiero un profundo conocimiento de CATransform3D. Por favor ayuden con cualquier artículo, documentación o explicándose.
Muchas gracias.
El valor de m34
es la tercera fila, cuarta columna y es el valor en la matriz detrás de la transformación que realmente da la perspectiva de rotación.
Puedes leer más sobre las matemáticas detrás de las multiplicaciones de matrices en Wikipedia.
Respecto a los valores para CATransform3DRotate(...)
.
- El primer argumento es la transformación que estás rotando.
- El segundo es el ángulo (en radianes),
- Los otros tres argumentos es el eje sobre el que gira ((x, y, z) vector).
No estoy seguro de lo que es m34
sin mirar.
Una rotación 2D es fácil porque todo lo que necesita es un ángulo para rotar. Luego, la rotación se realiza ALREDEDOR del eje Z (es decir, el eje que apunta directamente fuera de la pantalla).
Una rotación 3D es diferente. Necesita un ángulo, pero también necesita saber en qué ejes (o ejes) está girando.
En CATransform3DRotate
le das cinco parámetros ...
- La transformación a la que desea aplicar la rotación.
Ángulo (en radianes) π radianes = 180 grados 3, 4 y 5 son la cantidad de rotación del ángulo que se aplica a cada eje.
Eje X: este es el eje que va desde la izquierda de la pantalla a la derecha de la pantalla.
- Eje Y: este es el eje que va desde la parte superior de la pantalla hasta la parte inferior de la pantalla.
- Eje Z: este es el eje que apunta directamente desde la pantalla hacia usted.
La rotación que ha aplicado en su ejemplo es la siguiente ...
ángulo = 45 grados (convertido en radianes). X = 0 Y = 1 Z = 0
Esto significa que todos los 45 grados girarán alrededor del eje Y. es decir, girará como una puerta giratoria alrededor de la línea por su centro.
Si tuviera los parámetros ... "1, 0, 0" al final, entonces giraría como una paleta de bote de remos. "Cayendo lejos de ti".
Finalmente, si tuviera "0, 0, 1" giraría como una rueda de catherine en la pantalla.
También puede combinar los valores, es decir, tener "0, 1, 1" para aplicar la rotación en dos ejes.
La fila w de la matriz es la proyección en perspectiva. ¿Alguna vez hiciste un dibujo en perspectiva en la escuela donde colocaste un punto y dibujas líneas del punto y luego dibujas cosas para que se ajusten a esas líneas para darle perspectiva? Bueno, el valor m34 determina dónde se coloca ese punto y, por lo tanto, proporciona una perspectiva. Ajústelo a algo como -50 y verá una diferencia mayor.
El ajuste m34 se relaciona con el valor del eje Z de este punto. Entonces el punto se coloca en (0, 0, -1/500)