Introducción Informática Gráfica
Segundo Esteban San RománDpto. Arquitectura de Computadores y Automáitca Fac. CC. Físicas, Desp. 236, Fac. Informática, Desp:421 [email protected]
91-3944740
Historia
Proceso de Visualización
Paradigma Modelado-Renderizado, CPU-GPU
APIS Gráficas.
OpenGL vs DirectX
Evolución del hardware y las aplicaciones
Años 50: MIT primeros CRT’s (I.Shuderland)
Años 60: Industrias aeronáutica y automóvil
Años 70: CAD/CAM, Plotters, Videojuegos 2D
Años 80: Aparece Impr. Laser
Años 80: Industria de Animación
Años 90: Industria del videojuego (Tarjetas PC: NVIDIA, ATI, …)
Siglo XXI: Sistemas Empotrados
Introducción a la Informatic Gráfica
Estandarización de APIs Gráficos
1977: 3D CGS ACM/SIGGRAPH
1985: GKS ( bidimensional ) ISO ANSI
1988: GKS-3D, PHIGS
1989: SGI IrisGL (‘Terminator2’)
1992: SGI -> OpenGL
1993: Mesa 3D (OpenSource)
1995: RenderMan (Pixar) (‘ToyStory’)
1995: Microsoft DirectX 1.0
2001: Pixel-Vertex Shaders
2007: Vista-DirectX10
2008: OpenGL 3.0
Historia APIS
Estado Actual (imagen estática)
¿Cuál es la imagen real y la sintética?
Introducción a la Informatic Gráfica
Futuro Gráficos (videojuegos)
Aplicar técnicas de la industria de la animación 3D
Nuevas técnicas de modelado
Mayor nº de superficies,
Bump-normal mapping
Múltiples materiales
Nuevas técnicas de iluminación
Shaders con efectos ilumin.
Sombras
Animación
Física en ropas
Animación facial
Proceso de Visualización
Procesamiento de imagen (Visión): La adquisición y tratamiento de una imagen para conseguir un modelo informático de la misma
Síntesis de imagen (Proceso de visualización): es el conjunto de operaciones (en 3D y en 2D) sobre un Modelo Informático de Datos para obtener una Representación Gráfica del mismo en un
dispositivo físico de representación.
Proceso de Visualización 2D Modelo Geométrico Recortado Primitivas de Dibujo Rasterization / Scan Conversion Cambio de Coordenadas Display 2-D
Introducción a la Informatic Gráfica Proceso de Visualización 3D Recorrido de la escena Transform. de la Vista Recortado Eliminación de Caras Proyección Iluminación Rasterization / Scan Conversion Transformación del Dispositivo 3-D Transform. del Modelo Display Modelado/Renderizado - CPU/GPU MODELADO • Recorrido de la Escena • Interacción con la Escena • Animación Aplicación Geometría (Vertices) Raster (Fragmentos) Scena 3D input Image output
Introducción a la Informatic Gráfica APIs Gráficas Pricipales APIs: OpenGL D3D (DirectX) Qué proporcionan:
Implementa toda la parte de renderizado
Más eficiente: extensiones hardware
Portable a otros SO (en el caso de OpenGL)
Versiones para diferente hardware (ES)
Sobre estas APIs se montan otras de más alto nivel:
PLIB, SDL, OSG, FaceFX
Motores de Videojuegos: Nebula (O-D),
Unreal Eng (D)
ID Tech Eng (Quake) (O)
Evolución del Hardware-Software gráfico
Evolución de las GPU
1. GPU con ‘pipeline’ fijo.
2. Dos procesadores programables (Vertices/Pixeles).
3. ‘Stream’ configurable de GPU (NVIDIA GeForce 8800)
Las APIs han evolucionado, aceptando lenguajes de Shaders:
1. Programación Cg (NVIDIA)
2. HLSL
3. GLSL
Introducción a la Informatic Gráfica
APIS Gráficas Niveles de Abstracción de la programación de GPUs
APIS Gráficas Programaci ón d e GPUs: A P Is ( A z u l, Cg (Verde)
Introducción a la Informatic Gráfica
OpenGL
OpenGL es la interfaz software del hardware gráfico para desarrollar aplicaciones 2D y 3D:
Programación a medio-nivel
Intuitivo (unas 120 funciones con sintaxis sencilla)
Preparado para la Red (servidor-cliente)
Pipe-Line gobernado por una Maquina de Estados
Portable
A nivel SO (UNIX, Linux, Windows, MacOs,…)
A nivel HW (Computadores, Consolas, Móviles…)
A nivel de Lenguajes(C, C++, Fortran, Ada, Java)
Librerías OGL
Librerías de OpenGL:
GL: Librería OpenGL (gl.h, opengl32.dll). Implementa el núcleo de OpenGL, es
muy básica, trabaja a muy bajo nivel y no gestiona eventos ni ventanas.
GLU: OpenGL Utility Library (glu.h, glu32.dll). Librería que nos proporciona
rutinas de más alto nivel.
Conexión sistema nativo:
GLX
WGL
Librerías de Utilidades:
GLUT: API multiplataforma que facilita una
funcionalidad para el manejo de ventanas e interacción por medio de teclado y ratón.
GLUI: Interfaz de usuario basada en GLUT;
proporciona elementos de control tales como botones, cajas de selección y spinners.
Introducción a la Informatic Gráfica
Ventana OpenGL con GLUT
Crear la ventana OpenGL utilizando GLUT.
#include <GL/glut.h> void renderScene(void) { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLES); glVertex3f(-0.5,-0.5,0.0); glVertex3f(0.5,0.0,0.0); glVertex3f(0.0,0.5,0.0); glEnd(); glFlush(); }
void main(int argc, char **argv) { glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA); glutInitWindowPosition(100,100);
glutInitWindowSize(320,320);
glutCreateWindow("3D Tech- GLUT Tutorial"); glutDisplayFunc(renderScene);
glutMainLoop(); // Bucle infinito, gestionar los eventos y callbacks
}
http://www.lighthouse3d.com/opengl/glut/ http://www.xmission.com/~nate/glut.html
Ejemplo sobre API de Windows
Necesitamos:
La gestión de ventanas se realizaría con la API de WINDOWS
#include <windows.h> // Header File For Windows
#include <gl\gl.h> // Header File For The OpenGL32 Library
#include <gl\glu.h> // Header File For The GLu32 Library
HDC hDC=NULL; // Private GDI Device Context
HGLRC hRC=NULL; // Permanent Rendering Context
HWND hWnd=NULL; // Holds Our Window Handle
HINSTANCE hInstance; // Holds The Instance Of The Application
Introducción a la Informatic Gráfica
Ejemplo sobre API de Windows boolCreateGLWindow(char* title,intwidth, intheight,intbits, boolfullscreenflag){ if (!RegisterClass(&wc))… // Attempt to register the window class if (!(hWnd = CreateWindowEx(dwExStyle…), // Create the window
static PIXELFORMATDESCRIPTOR pfd =… // pfd tells windows how we want things to be if (!(hDC = GetDC(hWnd))) KillGLWindow(); … // Did we get a device context?
if (!(PixelFormat = ChoosePixelFormat(hDC,&pfd))) KillGLWindow(); // A matching pixel format? if(!SetPixelFormat(hDC,PixelFormat,&pfd)) KillGLWindow(); // Are we able to set the PFD? if (!(hRC = wglCreateContext(hDC))) KillGLWindow(); // Are we able to get a rendering context? if(!wglMakeCurrent(hDC,hRC)) KillGLWindow(); // Try to activate the rendering context ShowWindow(hWnd,SW_SHOW); // Show the window
SetForegroundWindow(hWnd); // Slightly higher priority
SetFocus(hWnd); // Sets keyboard focus to the window ReSizeGLScene(width, height); // Set up our perspective GL screen if (!InitGL()) KillGLWindow(); // Initialize our newly created GL window } DirectX Noviembre2006 (Especif. DirectX11, 2008) WindowsVista. DirectX 10.0 Agosto 2008 Especificaciones. DirectX 11.0 Bimonthly from 2005-08 Windows XP DirectX 9.0c December 24, 2002 Windows Server 2003 DirectX 9.0 September 30, 2000 DirectX 8.0 September 22, 1999 Windows 2000, ME DirectX 7.0 August 7, 1998 Windows NT 4.0 DirectX 6.0 September 15, 1996 Windows NT 4.0 SP3 DirectX 3.0 June 5, 1996 Windows 95and NT 4.0 DirectX 2.0 September 30, 1995 DirectX 1.0 Date released Operating system Logo version
Introducción a la Informatic Gráfica
Componentes Direct-X
Dos APIs gráficas DirectX (unificado en las últimas versiones):
DirectDraw (obsoleta): para gráficos 2D (Raster Graphics)
Direct3D (D3D): para gráficos 3D
DirectInput: Procesa datos de keyboard, mouse, joystick, game controllers
DirectPlay: Maneja las comunicaciones por red
DirectSound: Reproducción y grabado de sonido Waveform
DirectSound3D (DS3D): Reproducción de sonido 3D.
DirectMusic: Reproducción de Soundtracks de DirectMusic Producer
DirectX Media: DirectAnimation, DirectShow, DirectX Video Acceleration, soporta codificadores y decodificadores, ….
Direct3D
Direct3D: API gráfica de bajo nivel con aceleración 3D del hardware.
Entre Direct3D y el dispositivo gráfico se encuentra el HAL (Capa Abstracción Hardware), implementado por el fabricante
Librerías básicas:
D3D: Es el núclo de Direct3D D3DX: provee funcionales adicionales.
Line Drawing Support in D3DX (Direct3D 9) Mesh Support in D3DX (Direct3D 9) Math Function Support in D3DX (Direct3D 9) Texture Support in D3DX (Direct3D 9)
Introducción a la Informatic Gráfica
Crear una Ventana con un dispositivo D3D
Creamos una ventana Windows
Creamos el interfaz
Creamos el Disp.Renderizado Liberar al salir INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
{ // Register the window class.
WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL,"D3D Tutorial", NULL }; RegisterClassEx( &wc );
// Create the application's window.
HWND hWnd = CreateWindow( "Direct3D Tutorial", "Direct3D Tutorial 01: CreateDevice",WS_OVERLAPPEDWINDOW, 100, 100, 300, 300,
GetDesktopWindow(), NULL, wc.hInstance, NULL );
if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )return E_FAIL;
D3DPRESENT_PARAMETERS d3dpp; ZeroMemory( &d3dpp, sizeof(d3dpp) ); d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; if( FAILED( g_pD3D->CreateDevice(
D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pd3dDevice ) ) )
VOID Cleanup()
{if( g_pd3dDevice != NULL) g_pd3dDevice->Release(); if( g_pD3D != NULL) g_pD3D->Release(); } OpenGL vs DirectX Portabilidad:
Direct3D es para la familia de Microsoft's Windows, incluyendo versiones empotradas para Xbox y Sega's Dreamcast.
OpenGL dispone de implementaciones para Microsoft Windows, UNIX, Mac OS X, Linux y PlayStation 3.
OpenGL es la librería primaria para iPhone, Android (plataforma de móviles) y Symbian OS.
Variantes de OpenGL funcionan sobre Nintendo GameCube and Wii, Nintendo DS y PSP.
Mercado:
DirectX ha ocupado un mayor porcentaje en el mercado de los videojuegos.
Introducción a la Informatic Gráfica
OpenGL vs DirectX
Modo de funcionamiento:
D3D esta diseñado como un interfaz de hardware gráfico 3D, espera que la aplicación dirija el hardware.
OpenGL es un sistema de renderizado 3D, que puede ser acelerado por hardware. OpenGL gestiona la aceleración hardware.
Programacíón:
Programación básica: más fácil OpenGL
Aprovechar el Hardware: más fácil DirectX
Programación de Drivers: más fácil DirectX
Actualizaciones:
Extensiones OpenGL para nuevas capacidades hardware.
DirectX nuevas versiones adaptadas a las nuevas capacidades hardware.
“API Wars”: El bajo rendimiento de OpenGL vs D3D sobre plataformas Windows se debe a la implementación realizada por Microsoft