Introducción Informática Gráfica



Documentos relacionados
Arquitecturas GPU v. 2013

REALIZACIÓN DE UN MOTOR DE RENDER PARA DISPOSITIVOS MÓVILES BASADO EN IRRLICHT. Autor: Javier Meseguer de Paz Dirigido por: Antonio Berlanga de Jesús

Videojuegos. Guillermo Escudero Diego Hiegeo Nestor Tena Igor Moreda

Programación de Sistemas

Simulador de conducción de una fumigadora con banderillero satelital.

Demo FireMonkey La nueva generación de desarrollo de aplicaciones de negocio

Computación de Propósito General en Unidades de Procesamiento Gráfico GPGPU

2. Marco teórico 2.1.XNA

Tema 1 Introducción. David Vallejo Fernández. Curso 2007/2008. Escuela Superior de Informática

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

Creación de Videojuegos en OpenGL


DESARROLLADOR ANDROID INTRODUCCIÓN ANDROID. Ing. Marco Antonio Toscano Freire tw: martosfre

Taller de Programación de Dispositivos Móviles. José Miguel Rubio L. Oficina

Universidad de Belgrano

Lenguaje de Programación: C++ GLUT (como instalarlo)

Índice de Contenidos :.

Análisis de aplicación: TightVNC

Informática Electrónica Interfaces para los programas de aplicación (APIs)

Programas Análisis (Control de Nuestro PC)

Motor de Videojuegos.


GPUs. Comparación entre Nvidia y ATI. Raúl Rodríguez del Rosario

Tema II Introducción a X-Lib (R-1.0)

Tema 5 Lenguajes de programación

Universidad de Costa Rica Facultad de Ingeniería Escuela de Ingeniería Eléctrica

ORBERE. Memoria Técnica del Aplicativo de Gestión de la producción para ADIMDE

Unidad I. Introducción a la programación de Dispositivos Móviles (Continuación )

UNIVERSIDAD DEL ISTMO Ingeniería en computación Estructura de datos

Microsoft Office 2010 Illustrated. Tipos de Software

TGA - Tarjetas Gráficas y Aceleradores

Es un SW (en forma de librería C) que permite la comunicación entre el programador y el HW de la máquina para el diseño de gráficos.

Unidad I. Introducción a la programación de Dispositivos Móviles

El pipeline gráfico Figura 3.1


PROGRAMACIÓN DE APLICACIONES PARA ANDROID. 30 horas 45 días

Manual de instalación del BD Maker. Contenido

Ingresa Aquí y sé un experto en equipos Mikrotik

Arquitectura del sistema operativo GNU/Linux. Luis Eduardo Sepúlveda R.

Creado dentro de la línea de sistemas operativos producida por Microsoft Corporation.

Servicio de interfaces gráficas para entornos distribuidos. Autor: Sergio de Mingo Gil Tutor: Francisco J. Ballesteros

Visión general y entorno de desarrollo

COLEGIO COMPUESTUDIO

DIRECCIÓN REGIONAL DE EDUCACIÓN PUNO INSTITUTO DE EDUCACIÓN SUPERIOR TECNOLÓGICO PÚBLICO MACUSANI

1. INTRODUCCIÓN A OPENGL: DIBUJANDO UNA TORTUGA CON OPENGL

GRAPHICS PIPELINE. Computación Gráfica

Distribuido en exclusiva para España por EES SL

Sumario Instalación MDT V

Interfaces y Manejadores de Dispositivos

Ejercicio 1 (3 puntos).-

Desarrollo de Videojuegos con Unity

APLICACIONES MÓVILES NATIVAS. Sesión 8: Arquitectura de las aplicaciones Android

Módulo 1 El lenguaje Java

Dpto. Lenguajes y Ciencias de la Computación E.T.S.I. Telecomunicación. Laboratorio de Programación Introducción a Allegro con Dev-C++

Maquinas virtuales Conceptos Básicos

Beneficios estratégicos para su organización. Beneficios. Características V

Guías para el uso de las funciones del producto (Windows, Mac)

Capitulo 1: Plataforma Android

J2ME ENTORNO DE EJECUCIÓN. Un entorno de ejecución determinado de J2ME se compone entonces de una selección de:

Procesadores Gráficos: OpenCL para programadores de CUDA

CURSO BÁSICO DE COMPUTACIÓN

Se trata de una herramienta de desarrollo visual muy fácil de usar, con la que incluso los no programadores podrán desarrollar sus aplicaciones.

Versión 1.1 Fecha: Autores: Francisco González García Ismael García Fernández

Mi primera aplicación OpenGL con MFC. Con esta guía rápida, escribiremos nuestra primera aplicación OpenGL con MFC (Microsoft Foundations Class).

Software de sistema: Programas genéricos que permiten gestionar los recursos del ordenador.

Guía de Conexión WIFI a PRONET

OPERACIONES AUXILIARES CON TECNOLOGÍAS DE LA INFORMACIÓN Y LA COMUNICACIÓN. Entornos multimedia. Unidad 3

CAPÍTULO 1 Instrumentación Virtual

Transición de su infraestructura de Windows Server 2003 a una solución moderna de Cisco y Microsoft

TRABAJO DE INVESTIGACIÓN

WEB APP VS APP NATIVA

UT04 01 Máquinas virtuales (introducción)

GRAFICACIÓN OpenGL. Profr. Hilario Salazar Martínez

toda la potencia de un Dedicado con la flexibilidad del Cloud

Guías para el uso de las funciones del producto (Windows, Mac)

Desarrollo de Aplicaciones Web Por César Bustamante Gutiérrez. Módulo I: Conceptos Básicos Tema 1: Concepto iniciales.

Desarrollo de Videojuegos con Unity

Desarrollo de Aplicaciones Multimedia

Capitulo 4. JavaFX. Se da a conocer la plataforma de desarrollo JavaFX, los niveles en el cual se encuentra

FUNDAMENTOS DE PROGRAMACION CON C#

Tutorial 1. Instalación del entorno de desarrollo de Android. Curso de perfeccionamiento: Programación de Android TUTORIAL 1: INSTALACIÓN DEL SOFTWARE

CONTENIDO. Capítulo 1. Capítulo 3. Capítulo 2. Contenido

ELEMENTOS HARDWARE DEL ORDENADOR. Tarjeta gráfica

Sistemas de referencia Introducción a OpenGL

Adaptación de Algoritmos Geométricos al Uso de Hardware Gráfico Programable

Seminario II: Introducción a la Computación GPU

Qué es UltraVNC? Cómo se Instala?

Paradigmas de Programación

Computación Gráfica. (Algunos Fundamentos) Universidad de los Andes Demián Gutierrez Octubre

Configuración de PDAs en ITACTIL.

Temario 23/09/2008. UNIVERSIDAD ABIERTA INTERAMERICANA Facultad de Tecnología Informática. Luis Perdomo Rocio Gimenez

Capitulo 2 Android SDK

Transcripción:

Introducción Informática Gráfica Segundo Esteban San Román Dpto. Arquitectura de Computadores y Automáitca Fac. CC. Físicas, Desp. 236, Fac. Informática, Desp:421 segundo@dacya.ucm.es 91-3944740 Historia Proceso de Visualización Paradigma Modelado-Renderizado, CPU-GPU APIS Gráficas. OpenGL vs DirectX Historia 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 1

Historia APIS 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 Estado Actual (imagen estática) Cuál es la imagen real y la sintética? 2

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 Futuro Gráficos (videojuegos) 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 Primitivas de Dibujo Recortado Cambio de Coordenadas 2-D Rasterization / Scan Conversion Display 3

Proceso de Visualización 3D Recorrido de la escena Transform. del Modelo Transform. de la Vista Recortado Eliminación de Caras Proyección Transformación del Dispositivo 3-D Iluminación Rasterization / Scan Conversion Display Modelado/Renderizado - CPU/GPU Aplicación Geometría (Vertices) Raster (Fragmentos) Image input Scena 3D output MODELADO Recorrido de la Escena Interacción con la Escena Animación 4

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 de las GPU 1. GPU con pipeline fijo. 2. Dos procesadores programables (Vertices/Pixeles). 3. Stream configurable de GPU (NVIDIA GeForce 8800) Evolución del Hardware-Software gráfico Las APIs han evolucionado, aceptando lenguajes de Shaders: 1. Programación Cg (NVIDIA) 2. HLSL 3. GLSL 4. OpenCL, CUDA 5

Niveles de Abstracción de la programación de GPUs APIS Gráficas APIS Gráficas Programación de GPUs: APIs (Azul, Cg (Verde) 6

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. 7

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.xmission.com/~nate/glut.html http://www.lighthouse3d.com/opengl/glut/ Ejemplo sobre API de Windows Múltiples ejemplos con diferentes S.O. en http://nehe.gamedev.net La gestión de ventanas se realizaría con la API de WINDOWS #include <windows.h> #include <gl\gl.h> #include <gl\glu.h> Necesitamos: // Header File For Windows // Header File For The OpenGL32 Library // 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 8

Ejemplo sobre API de Windows bool CreateGLWindow(char* title, int width, int height, int bits, bool fullscreenflag){ 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 version DirectX 1.0 Logo Operating system Date released September 30, 1995 DirectX 2.0 DirectX 3.0 Windows 95and NT 4.0 Windows NT 4.0 SP3 June 5, 1996 September 15, 1996 DirectX 6.0 DirectX 7.0 Windows NT 4.0 Windows 2000, ME August 7, 1998 September 22, 1999 DirectX 8.0 September 30, 2000 DirectX 9.0 DirectX 9.0c Windows Server 2003 Windows XP December 24, 2002 Bimonthly from 2005-08 DirectX 10.0 DirectX 11.0 Especificaciones. WindowsVista. Noviembre2006 (Especif. DirectX11, 2008) Agosto 2008 9

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) 10

Crear una Ventana con un dispositivo D3D Creamos una ventana Windows 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 ); Creamos el interfaz if( NULL == ( g_pd3d = Direct3DCreate9( D3D_SDK_VERSION ) ) )return E_FAIL; Creamos el Disp.Renderizado 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 ) ) ) Liberar al salir 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. OpenGL ha suplido históricamente el mercado profesional de gráficos. 11

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 (SIGGRAPH). 12