1 of 27

Transformaciones y sistemas de coordenada, proyecciones y cámaras.

By Romualdo Villalobos

2 of 27

Transformaciones en 1 dimensión

3 of 27

Vectores

4 of 27

Operaciones entre vector y escalar

Suma, negación y escala.

5 of 27

Operaciones entre vector y vector

Suma y resta

6 of 27

Otras operaciones con vectores

Magnitud y normalización.

7 of 27

Multiplicación entre vector y vector

Producto punto y producto cruz.

8 of 27

Matrices

9 of 27

Operaciones con matrices

Suma y resta de matrices

10 of 27

Operaciones con matrices

Multiplicación de escalar y matriz

11 of 27

Espacios vectoriales, sistemas de coordenadas, transformaciones y matrices.

12 of 27

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

13 of 27

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)

14 of 27

Los headers principales que estaremos usando y ejemplo de uso.

OpenGL Mathematics (GLM)

15 of 27

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

16 of 27

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

17 of 27

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

18 of 27

19 of 27

Proyección ortográfica (Orthographic projection)

20 of 27

Proyección de perspectiva (Perspective projection)

21 of 27

Proyección de perspectiva (Perspective projection)

22 of 27

Vértices en view space y el frustum de la cámara que los observa.

Proyección de perspectiva (Perspective projection)

23 of 27

Multiplicando todos los vértices por la matriz de proyección. En rojo se ve el NDC.

Proyección de perspectiva (Perspective projection)

24 of 27

La imagen final lucirá de la siguiente forma.

Proyección de perspectiva (Perspective projection)

25 of 27

En esta etapa del pipeline OpenGL realiza automáticamente algo llamado perspective divide.

26 of 27

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

27 of 27

Bibliografía