Está en la página 1de 56

CUDA + OpenGL

Alvaro Cuno
23/01/2010

OpenGL

Biblioteca grfica escalable y multiplataforma

Linux, Windows, Solaris, Amiga ...

Permite el desarrollo de aplicaciones interactivas 2D y 3D Provee


Primitivas grficas vectoriales y matriciales (imgenes) Transformaciones e iluminacin Mapeamiento de texturas, etc.

Varias implementaciones (Mesa,Microsoft,etc.)


2

OpenGL

Que no hace?

No hace administracin de ventanas No se preocupa con la interaccin con el usuario No se preocupa con archivos de entrada y salida Pero puede ser usada con varios lenguajes de programacin: C, C++, Python, Java, Fortran, etc.

No es un lenguaje de programacin

OpenGL

Funciona como una mquina de estados La API tiene rutinas para


Disear primitivas geomtricas e imgenes Alterar variables de estado (ejemplo: color, material, pila de matrices, etc.) Consultar variables de estado Mecanismo estandarizado de extensiones Las nuevas versiones son establecidas por un comite (ARB) de usuarios y fabricantes
4

OpenGL es un estndar en evolucin


OpenGL: APIs relacionadas

OpenGL (Open Graphics Library)

Funcionalidad grfica Funcionalidad extra Parte del estndar OpenGL Posee varias funciones para modelaje

GLU (OpenGL Utility Library)


Curvas, superficies cuadrticas y NURBs

GLUT (OpenGL Utility Toolkit)

API porttil para acceso a los sistemas de ventanas

Hello OpenGL

OpenGL: ejemplo 1

Renderizacin de un rectngulo

gluOrtho2D

(0,0)

x 1

gluOrtho2D

(0,0)

x 1

gluOrtho2D

(0,0)

x 1

10

gluOrtho2D

(0,0)

x 1

11

OpenGL: ejemplo 2

Rendering de una textura (ejemplo del redbook)

12

OpenGL: Texturas

13

OpenGL: Texturas

s 0 1
14

OpenGL: Texturas

s 0 1
15

OpenGL: Texturas

s 0 1
16

OpenGL: ejemplo 3

Rendering de una textura (ejemplo modificado del redbook)


Display Image Image Texture

Host

Device

17

OpenGL: ejemplo 4

Rendering de una textura (ejemplo del redbook usando PBO)


Display Image Image PBO

Image Texture

Host

Device

18

OpenGL: ejemplo 4

Ejercicio: Modificar los valores de los texels usando un kernel


Display Image Image PBO

Image Texture

CUDA Kernel

Host

Device

19

OpenGL: ejemplo 5

Ejercicio: codificar un kernel de filtraje

0 1 0

1 1 1

0 1 0

20

OpenGL: ejemplo 5

Ejercicio: codificar un kernel de filtraje

0 1 0

1 1 1

0 1 0

Display Image Image PBO

Image Texture Image CudaTex


CUDA Kernel

Host

Device

21

OpenGL: Texturas

Rendering de una textura (a partir de una imagen)

22

OpenGL: Imgenes

Sin compresin Con compresin

23

OpenGL: Imgenes

Sin compresin: son usados para reducir el espacio para almacenamiento y aumentar la velocidad de transmisin Compresin sin prdida: cada pxel original puede ser reproducido exactamente

Ejemplo: formato GIF (8 bits)

Compresin con prdida: cada pxel es reproducido aproximadamente


Permite mejores tasa de compresin Ejemplo: formato JPEG (8/24 bits). No soporta transparencia
24

OpenGL: Imgenes

Sin compresin: son usados para reducir el espacio para almacenamiento y aumentar la velocidad de transmisin Compresin sin prdida: cada pxel original puede ser reproducido exactamente

Ejemplo: formato GIF (8 bits)

Compresin con prdida: cada pxel es reproducido aproximadamente


Permite mejores tasa de compresin Ejemplo: formato JPEG (8/24 bits). No soporta transparencia
25

OpenGL: Imgenes

Sin compresin: familia PNM (portable anymap format)

PPM (pixmap)

1 bit por pxel (P1/P4) 8 bits por pxeles (P2/P5) 24 bits por pxeles (P3/P6)

PGM (graymap)

PBM (bitmap)

26

OpenGL: Imgenes

Sin compresin: familia PNM

PPM (pixmap)

1 bit por pxel (P1/P4)

27

OpenGL: Imgenes

Sin compresin: familia PNM

PGM (graymap)

8 bits por pxeles (P2/P5)

28

OpenGL: Imgenes

Sin compresin: familia PNM

PBM (bitmap)

24 bits por pxeles (P3/P6)

29

OpenGL: Imgenes

Ejercicio

Codifique una rutina para cargar una imagen de un archivo PPM Codifique filtros para procesamiento de imgenes

Blur

Edge detect

Sharpen

Edge enhance

Emboss

30

OpenGL: Imgenes

31

OpenGL 3D

32

OpenGL 3D

Modificar la geometra (los vrtices) de un modelo

33

OpenGL 3D

Modificar la geometra (los vrtices) de un modelo

34

OpenGL 3D

Modificar la geometra (los vrtices) de un modelo

35

Modelos 3D

36

Modelos 3D

37

Modelos 3D

Modelos de superficie

Modelos volumtricos

38

Modelos 3D

Modelos de superficie

Modelos volumtricos

39

Modelos de superficies

Paramtricas Puntos Polgonos (mallas)

40

Mallas

Ventajas

Desventajas

Generalidad para aproximar objetos de topologa arbitraria

Gran nmero de polgonos (memoria)

Exactitud arbitraria

Hardware especializado

Superficies curvas complejas y con muchos detalles

Superficies son aproximadas dentro de una precisin fija

41

Mallas

Aproximacin lineal por partes de superficies complejas Hoy en da las mallas de tringulos son altamente populares Buena alternativa para superficies spline tradicionales

Su simplicidad conceptual permite:

Procesamiento flexible y altamente eficiente

Bastante usadas en CAD (computer-aided design) Juegos por computador y produccin de cine
42

Mallas

Consiste de dos componentes

43

Mallas

Consiste de dos componentes

Geomtrico

Las posiciones de los vrtices definen la geometra de la superficie

44

Mallas

Consiste de dos componentes

Geomtrico

Las posiciones de los vrtices definen la geometra de la superficie

Topolgico

La adyacencia de vrtices, aristas y polgonos define la topologa de la superficie


45

Mallas

Estructuras de datos

Punteros para lista de vrtices Punteros para lista de aristas Winged-Edge Half-Edge Face-Edge, Quad-Edge, Radial-Edge

46

Mallas

La descripcin de la ED halfedge es simple, sin embargo, su implementacin eficiente (tiempo/memoria), robusta y fcil de usar no lo es Se sugiere usar implementaciones opensource

Bibliotecas C++

CGAL (www.cgal.org) OpenMesh (www.openmesh.org)

47

Mallas

Formatos de archivos

Categoras: Ascii o Binario Tipos

PLY, STL, OFF, OBJ, 3DS, COLLADA, PTX, V3D, PTS, APTS, XYZ, GTS, TRI, ASC, X3D, X3DV, VRML, ALN

48

Mallas

Formato OFF

49

Identificador

Mallas

N. de vrtices

N. de polgonos

Formato OFF
Geometra

Topologa

50

Mallas

ED simple
v1

v2

f1

f2

v4

v3

51

Mallas

ED simple
v1

v2

f1

f2

v4

v3 V = {v1={x1,y1,z1}, v2={x2,y2,z2}, v3={x3,y3,z3}, v4={x4,y4,z4}} F = {idv1, idv2, idv3, idv1, idv3, idv4} FV = {idv1={f1,f2}, idv2={f1}, idv3={f2,f1}, idv4={f2}}
52

El futuro

53

El presente

Tradicionalmente, para mejorar el desempeo solo se requera cambiar de hardware

Sin embargo, en la actualidad ...


Hardware Software (oportunidad para programadores!) http://arstechnica.com/articles/paedia/gpu-sweeneyinterview.ars http://www.sciencedaily.com/releases/2008/09/080916155058. htm

54

Recursos

Libros online

GPU Gems: Programming Techniques, Tips, and Tricks for Real-Time Graphics

http://http.developer.nvidia.com/GPUGems/gpugems_part01.html

GPU Gems 2: Programming Techniques for HighPerformance Graphics and General-Purpose Computation

http://http.developer.nvidia.com/GPUGems2/gpugems2_part01.html http://http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.ht ml

The Cg Tutorial

55

Recursos

Code

http://www.gpgpu.org/ http://www.graphicshardware.org/ http://www.shadertech.com

56

También podría gustarte