En esta sección, exploraremos los conceptos de proyecciones y vistas en gráficos 3D. Estos conceptos son fundamentales para la representación visual de objetos tridimensionales en una pantalla bidimensional. Aprenderemos sobre los diferentes tipos de proyecciones, cómo se calculan y cómo afectan la visualización de los objetos.
- Introducción a las Proyecciones
Las proyecciones son métodos para representar objetos tridimensionales en dos dimensiones. Existen dos tipos principales de proyecciones:
- Proyección Ortográfica
- Proyección en Perspectiva
1.1 Proyección Ortográfica
La proyección ortográfica es una técnica en la que los rayos proyectantes son perpendiculares al plano de proyección. Esto significa que no hay distorsión debido a la perspectiva, y las dimensiones de los objetos se mantienen constantes sin importar su distancia del plano de proyección.
Características:
- No hay distorsión por perspectiva.
- Las dimensiones de los objetos son constantes.
- Útil para planos técnicos y dibujos de ingeniería.
Ejemplo de Matriz de Proyección Ortográfica:
import numpy as np def ortho_projection_matrix(left, right, bottom, top, near, far): return np.array([ [2 / (right - left), 0, 0, -(right + left) / (right - left)], [0, 2 / (top - bottom), 0, -(top + bottom) / (top - bottom)], [0, 0, -2 / (far - near), -(far + near) / (far - near)], [0, 0, 0, 1] ]) # Ejemplo de uso left, right, bottom, top, near, far = -1, 1, -1, 1, -1, 1 ortho_matrix = ortho_projection_matrix(left, right, bottom, top, near, far) print(ortho_matrix)
1.2 Proyección en Perspectiva
La proyección en perspectiva simula cómo el ojo humano ve el mundo. Los objetos más lejanos se ven más pequeños que los objetos cercanos, creando una sensación de profundidad.
Características:
- Los objetos más lejanos se ven más pequeños.
- Crea una sensación de profundidad.
- Útil para simulaciones realistas y videojuegos.
Ejemplo de Matriz de Proyección en Perspectiva:
import numpy as np def perspective_projection_matrix(fov, aspect, near, far): f = 1 / np.tan(fov / 2) return np.array([ [f / aspect, 0, 0, 0], [0, f, 0, 0], [0, 0, (far + near) / (near - far), (2 * far * near) / (near - far)], [0, 0, -1, 0] ]) # Ejemplo de uso fov = np.radians(90) aspect = 16 / 9 near, far = 0.1, 100 perspective_matrix = perspective_projection_matrix(fov, aspect, near, far) print(perspective_matrix)
- Tipos de Vistas
Las vistas determinan desde qué ángulo y posición se observa el objeto en el espacio 3D. Las vistas comunes incluyen:
- Vista Frontal
- Vista Superior
- Vista Lateral
- Vista en Perspectiva
2.1 Vista Frontal
La vista frontal muestra el objeto desde el frente, alineado con el eje Z.
2.2 Vista Superior
La vista superior muestra el objeto desde arriba, alineado con el eje Y.
2.3 Vista Lateral
La vista lateral muestra el objeto desde un lado, alineado con el eje X.
2.4 Vista en Perspectiva
La vista en perspectiva muestra el objeto desde un punto de vista arbitrario, simulando la visión humana.
- Ejercicios Prácticos
Ejercicio 1: Crear una Matriz de Proyección Ortográfica
Instrucciones:
- Define una función
ortho_projection_matrix
que tome los parámetrosleft
,right
,bottom
,top
,near
, yfar
. - Calcula y retorna la matriz de proyección ortográfica.
Solución:
def ortho_projection_matrix(left, right, bottom, top, near, far): return np.array([ [2 / (right - left), 0, 0, -(right + left) / (right - left)], [0, 2 / (top - bottom), 0, -(top + bottom) / (top - bottom)], [0, 0, -2 / (far - near), -(far + near) / (far - near)], [0, 0, 0, 1] ]) # Prueba la función left, right, bottom, top, near, far = -2, 2, -2, 2, -2, 2 print(ortho_projection_matrix(left, right, bottom, top, near, far))
Ejercicio 2: Crear una Matriz de Proyección en Perspectiva
Instrucciones:
- Define una función
perspective_projection_matrix
que tome los parámetrosfov
,aspect
,near
, yfar
. - Calcula y retorna la matriz de proyección en perspectiva.
Solución:
def perspective_projection_matrix(fov, aspect, near, far): f = 1 / np.tan(fov / 2) return np.array([ [f / aspect, 0, 0, 0], [0, f, 0, 0], [0, 0, (far + near) / (near - far), (2 * far * near) / (near - far)], [0, 0, -1, 0] ]) # Prueba la función fov = np.radians(60) aspect = 4 / 3 near, far = 0.1, 100 print(perspective_projection_matrix(fov, aspect, near, far))
- Conclusión
En esta sección, hemos aprendido sobre las proyecciones ortográficas y en perspectiva, así como los diferentes tipos de vistas en gráficos 3D. Hemos visto cómo se calculan las matrices de proyección y cómo afectan la visualización de los objetos. Estos conceptos son fundamentales para la representación y manipulación de gráficos en tres dimensiones.
En la siguiente sección, exploraremos el modelado de superficies, donde aplicaremos estos conceptos para crear y manipular objetos 3D más complejos.
Matemáticas 3D
Módulo 1: Fundamentos de Álgebra Lineal
- Vectores y Espacios Vectoriales
- Matrices y Determinantes
- Sistemas de Ecuaciones Lineales
- Autovalores y Autovectores
Módulo 2: Transformaciones Lineales
- Definición y Propiedades
- Matrices de Transformación
- Rotaciones, Traslaciones y Escalados
- Composición de Transformaciones
Módulo 3: Geometría en el Espacio 3D
- Coordenadas y Planos
- Vectores en el Espacio 3D
- Producto Escalar y Vectorial
- Ecuaciones de Planos y Rectas