Conceptos Clave y Algoritmos en Computación Gráfica
Fundamentos de Computación Gráfica
Padre de la computación gráfica: Ivan Sutherland
OpenGL basado en el API: Iris GL
Dispositivos de Visualización
Dispositivos display vistos en clase: LCD, LED – OLED – AMOLED, Plasma y Retina Display
Ventajas: [Información pendiente]
Monitor CRT
Dibujado de un frame:
- De A-B: Línea de barrido o barrido horizontal.
- De B-C: Retorno Horizontal.
- De D-A: Retorno Vertical.
Frecuencia de refresco mínimo CRT: 60Hz
Unidad mínima de representación gráfica: Pixel
DAC: Digital-to-Analog Converter
APIs Gráficas y Shaders
OpenGL se desarrolló en: 1992 por Silicon Graphics Inc.
Competencia directa de OpenGL: DirectX Direct3D
Ventaja de Direct3D sobre OpenGL: No requiere buscar librerías adicionales para manejo de multimedia, interfaces, red y demás módulos.
Modelos de Sombreado (Shading Models)
- GLSL: Ligado a OpenGL
- HLSL: Microsoft, ligado a DirectX
- CG: Nvidia, compatible con OpenGL y con DirectX
Tipos de Shaders
- Vertex Shader
- Fragment Shader
- Geometry Shader
- Pixel Shader
Etapas del Pipeline de Renderizado: [Información pendiente]
Proyecciones Gráficas
¿Diferencia entre proyección en perspectiva y proyección ortogonal?
- Proyección en perspectiva: Para ver en 3D. La posición del observador se encuentra dentro de la escena y el volumen de visualización es un frustum. No se sabe con certeza el tamaño de los objetos por la profundidad, usa la perspectiva. Se utiliza en recorridos virtuales y videojuegos. Toma en consideración la profundidad de los objetos.
- Proyección ortogonal: Para ver en 2D. Las líneas de proyección son paralelas entre sí y ortogonales al plano de proyección. Se considera que el observador está en el infinito y no se toma en cuenta la profundidad.
Cinco comandos de OpenGL (Perspectiva y Cámara): glPerspective / glFrustum / glOrtho / glOrtho2D / glLookAt
Historia de la Computación Gráfica
- Trabajaba para Lucas Film y Pixar: Loren Carpenter
- Tesis Doctoral de Ivan Sutherland: Sketchpad
- Primer videojuego que se creó: OXO
- Creó parte de la documentación de OpenGL 1.0: Mark Segal
- Surge la película de Toy Story y Play Station 1: 1995
- Primer videojuego en 3D: Doom
- 1ª computadora de propósito general (1946): ENIAC
- 1ª computadora con tubos de rayos catódicos (1950): Whirlwind (simulaba vuelos de entrenamiento)
- 1er sistema en emplear lápiz óptico (1950): SAGE
- 1er videojuego (1952): OXO (tesis doctoral de Alexander Sandy Douglas)
- 1ª computadora con memoria (1952): EDSAC
- 1961: Primer programa interactivo: SPACEWAR
- 1er sistema para manipulación directa de objetos gráficos (1963): Sketchpad (tesis doctoral de Ivan Sutherland, es el precursor de CAD)
- Padre de la Computación Gráfica: Ivan Sutherland
- 1ª computadora exclusiva para videojuegos (1971): Atari
- 1er juego de arcade (1972): Pong
- Logra fotorrealismo en películas: RenderMan (ejem: Terminator 2, Forrest Gump)
- 1995: Surge PlayStation y Toy Story
- GPGPU (2008): Unidades de procesamiento lógico general. Gráficos y cálculos físicos.
- (1992) OpenGL basado en: Iris GL
- Supercomputadora UNAM: Miztli
Tecnologías de Procesamiento Paralelo
Tecnologías de procesamiento en paralelo: CUDA y OpenCL
Tecnologías de tarjetas en paralelo: SLI y Crossfire
Año en que Nvidia lanza la primera tarjeta con GPU: 1999
Afirmaciones sobre Computación Gráfica
- Los paquetes de propósito específico proporcionan una colección de funciones gráficas que se pueden implementar dentro de los lenguajes de programación ______ FALSO
- OpenGL solo cuenta con funciones de dibujo __________ VERDADERO
- Direct3D actualmente se encarga de dibujos de gráficos 2D _____ FALSO
- Los shaders son efectos de iluminación y sombreado procesados por el CPU___ FALSO
- Debemos considerar la tarjeta gráfica, lenguaje de sombreado, versión de modelo y lenguaje de programación usado cuando queremos desarrollar con shaders ____ VERDADERO
Detalles de Tecnologías de Visualización
Explique la función del cristal líquido en los dispositivos de despliegue de LCD y dibuje el diagrama general indicando las partes que lo forman: [Información pendiente]
Función del cristal líquido en LCD: La sustancia líquida atrapada entre 2 placas de vidrio, haciendo que al aplicar una corriente eléctrica a una zona específica, esta se vuelva opaca y contraste con la iluminación CCFL trasera.
Mencione 3 desventajas de la tecnología AMOLED: [Información pendiente]
- Menor brillo (problemas al verlo a la luz del sol)
- Producción más cara
- Menor periodo de vida
Se tiene un monitor con una resolución de 1920 x 1080, ¿qué cantidad de memoria (en bits) se requiere por pixel, para que cada uno de los pixeles del monitor pueda seleccionar entre 1024 colores? [Información pendiente]
Ventajas de OLED sobre otras tecnologías:
- Ángulos de visión casi perfectos
- Blancos más brillantes
- La pantalla AMOLED se ve mejor en exteriores porque tiene mayor contraste
- Las pantallas Retina tienen una densidad de píxeles tan alta que los píxeles individuales no son perceptibles a simple vista a una distancia de visualización normal
- IPS ofrece un ángulo de visión mayor
- PLS consume menos energía
- En la vista de perspectiva podemos apreciar que los objetos tienen diferentes tamaños dependiendo de las distancias a las que se encuentran uno de otro
- En la vista ortogonal no podemos notar la diferencia de tamaño independientemente de la distancia entre los objetos
Algoritmos de Recorte (Clipping)
Cohen-Sutherland
- Dividir escenario en 9 regiones.
- Asignar número binario a cada región (dan el código para la asignación).
- Operar los puntos extremos de cada línea con OR.
Si OR = 0 → se dibuja completa y si no:
- Operar AND:
- Si AND = 0 → se recorta
- Si AND ≠ 0 → se descarta
- Para obtener puntos de recorte se necesitan los valores de la línea y los datos de la ventana.
Liang-Barsky
Datos:
- Vértices de la línea a recortar:
- Pi (Pix, Piy)
- Pf (Pfx, Pfy)
- Xizq, Xder, Ymín, Ymáx de la ventana de recorte.
Solución:
- Obtener los vértices de la ventana de recorte V0, V1, V2 y V3 en sentido antihorario y comenzando con el inferior izquierdo.
- Encontrar posibles puntos de recorte en cada límite:
- Límite izquierdo (NOTA: Pizqx = Xizq):
- Pizqx = Pix + Uizq (Pfx – Pix) → encontramos Uizq y si Uizq ∈ [0, 1]:
- Pizqy = Piy + Uizq (Pfy – Piy) → encontramos Pizqy
Posible punto de recorte: Pizq (Pizqx, Pizqy)
- Límite derecho (NOTA: Pderx = Xder):
- Pderx = Pix + Uder (Pfx – Pix) → encontramos Uder y si Uder ∈ [0, 1]:
- Pdery = Piy + Uder (Pfy – Piy) → encontramos Pdery
Posible punto de recorte: Pder (Pderx, Pdery)
- Para Límite superior (NOTA: Psupy = Ymáx):
- Psupy = Piy + Usup (Pfy – Piy) → encontramos Usup y si Usup ∈ [0, 1]:
- Psupx = Pix + Usup (Pfx – Pix) → encontramos Psupx
Posible punto de recorte: Psup (Psupx, Psupy)
- Para Límite inferior (NOTA: Pinfy = Ymín):
- Pinfy = Piy + Uinf (Pfy – Piy) → encontramos Uinf y si Uinf ∈ [0, 1]:
- Pinfx = Pix + Uinf (Pfx – Pix) → encontramos Pinfx
Posible punto de recorte: Pinf (Pinfx, Pinfy)
NOTA: Si las pendientes Uizq, Uder, Usup y Uinf no ∈ [0, 1], no hay punto posible de recorte.
- Si Pizq ∈ [Xizq, Xder] && [Yinf, Ysup] → es punto de recorte.
Si Pder ∈ [Xizq, Xder] && [Yinf, Ysup] → es punto de recorte.
Si Psup ∈ [Xizq, Xder] && [Yinf, Ysup] → es punto de recorte.
Si Pinf ∈ [Xizq, Xder] && [Yinf, Ysup] → es punto de recorte.
Algoritmo de Trazado de Líneas
Bresenham
- Pi y Pf.
- Restricciones:
- Xf > Xi
- 0 ≤ m ≤ 1
- Xi, Yi, Xf, Yf ∈ &mathbb{R}^+
Si las tres restricciones se cumplen, se procede a:
- Dibujar (X0, Y0) = (Xi, Yi) y calcular P0 = 2ΔY – ΔX.
- Si Pj > 0, dibujar: (Xj+1, Yj+1)
Pj+1 = Pj + 2ΔY – 2ΔX
- Si Pj ≤ 0, dibujar: (Xj+1, Yj)
Pj+1 = Pj + 2ΔY
NOTA: Si Pj = 0, asignar cualquiera de los dos casos, pero, si vuelve a quedar Pj = 0, volver a utilizar el mismo caso.
- Repetir hasta que Xj = Xf.
Caso Especial Bresenham (m < 0)
- Xf > Xi
- m < 0
- Xi, Yi, Xf, Yf ∈ &mathbb{R}^+
Si las tres restricciones se cumplen, se procede a:
- Dibujar (X0, Y0) = (Xi, Yi) y calcular P0 = 2ΔY – ΔX.
- Si Pj > 0, dibujar: (Xj+1, Yj – 1)
Pj+1 = Pj + 2ΔY – 2ΔX
- Si Pj ≤ 0, dibujar: (Xj+1, Yj)
Pj+1 = Pj + 2ΔY
- Repetir hasta que Xj = Xf.