Transformaciones y sistemas de coordenada, proyecciones y cámaras.
By Romualdo Villalobos
Transformaciones en 1 dimensión
Vectores
Operaciones entre vector y escalar
Suma, negación y escala.
Operaciones entre vector y vector
Suma y resta
Otras operaciones con vectores
Magnitud y normalización.
Multiplicación entre vector y vector
Producto punto y producto cruz.
Matrices
Operaciones con matrices
Suma y resta de matrices
Operaciones con matrices
Multiplicación de escalar y matriz
Espacios vectoriales, sistemas de coordenadas, transformaciones y matrices.
OpenGL no tiene ningún tipo de conocimiento matricial o vectorial integrado (GLSL si pero no la libreria).
Por lo que tenemos que definir nuestras propias clases y funciones de matemáticas. En la vida real es más fácil abstraerse de todos los pequeños detalles matemáticos y simplemente usar bibliotecas matemáticas existentes.
En la práctica
GLM es una librería “header-only”, lo que significa que solo tenemos que incluir los archivos .h adecuados y listo; no es necesario vincular ni compilar nada.
GLM se puede descargar desde su sitio web.
Para instalar solo hay que copiar la carpeta glm de includes en la ruta OPENGL_DIR.
OpenGL Mathematics (GLM)
Los headers principales que estaremos usando y ejemplo de uso.
OpenGL Mathematics (GLM)
Anteriormente pasamos colores a los shaders usando uniforms, ahora intentaremos pasar matrices a los shaders usando uniforms.
Pasando una matriz como uniform a los shaders
Hacer que el quad se mueva a la derecha si se presiona flecha derecha.
Hacer que el quad se mueva a la izquierda si se presiona flecha izquierda.
Hacer que el quad se mueva a la arriba si se presiona flecha arriba.
Hacer que el quad se mueva a la derecha si se presiona flecha abajo.
Ejercicio
Anteriormente pasamos colores a los shaders usando uniforms, ahora intentaremos pasar matrices a los shaders usando uniforms.
Ver código de referencia
Pasando una matriz como uniform a los shaders
Proyección ortográfica (Orthographic projection)
Proyección de perspectiva (Perspective projection)
Proyección de perspectiva (Perspective projection)
Vértices en view space y el frustum de la cámara que los observa.
Proyección de perspectiva (Perspective projection)
Multiplicando todos los vértices por la matriz de proyección. En rojo se ve el NDC.
Proyección de perspectiva (Perspective projection)
La imagen final lucirá de la siguiente forma.
Proyección de perspectiva (Perspective projection)
En esta etapa del pipeline OpenGL realiza automáticamente algo llamado perspective divide.
Pasar la matrix model, view y projection como uniforms. referencia.
Hacer que la cámara siempre mire hacia el origen del mundo.
Hacer que la cámara se mueva hacia arriba cuando se presiona W.
Hacer que la cámara se mueva hacia abajo cuando se presiona S.
Hacer que la cámara se mueva hacia izquierda cuando se presiona A.
Hacer que la cámara se mueva hacia derecha cuando se presiona D.
Hacer que la cámara cambie de ortográfica a perspectiva cuando presiono la tecla space.
Dibujar un cubo en el centro del mundo. referencia.
Hacer que el cubo gire (animado). referencia.
Ejercicio
http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices/
https://learnopengl.com/Getting-started/Transformations
https://learnopengl.com/Getting-started/Coordinate-Systems
https://natureofcode.com/book/chapter-1-vectors/
https://github.com/romualdo97/opengl_studies/tree/master/005_transformations
Bibliografía