CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL:...

56
1 CUDA + OpenGL 23/01/2010 Alvaro Cuno

Transcript of CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL:...

Page 1: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

1

CUDA + OpenGL

23/01/2010

Alvaro Cuno

Page 2: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

2

OpenGL● Biblioteca gráfica escalable y multiplataforma

● Linux, Windows, Solaris, Amiga ...

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

● Provee● Primitivas gráficas vectoriales y matriciales (imágenes)● Transformaciones e iluminación● Mapeamiento de texturas, etc.

● Varias implementaciones (Mesa,Microsoft,etc.)

Page 3: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

3

OpenGL● ¿Que no hace?

● No hace administración de ventanas● No se preocupa con la interacción con el usuario ● No se preocupa con archivos de entrada y salida

● No es un lenguaje de programación● Pero puede ser usada con varios lenguajes de

programación: C, C++, Python, Java, Fortran, etc.

Page 4: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

4

OpenGL● Funciona como una máquina de estados● La API tiene rutinas para

● Diseñar primitivas geométricas e imágenes● Alterar variables de estado (ejemplo: color, material,

pila de matrices, etc.)● Consultar variables de estado

● OpenGL es un estándar en evolución● Mecanismo estandarizado de extensiones● Las nuevas versiones son establecidas por un comite

(ARB) de usuarios y fabricantes

Page 5: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

5

OpenGL: APIs relacionadas● OpenGL (Open Graphics Library)

● Funcionalidad gráfica

● GLU (OpenGL Utility Library)● Funcionalidad extra● Parte del estándar OpenGL● Posee varias funciones para modelaje

– Curvas, superficies cuadráticas y NURBs

● GLUT (OpenGL Utility Toolkit)● API portátil para acceso a los sistemas de ventanas

Page 6: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

6

Hello OpenGL

Page 7: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

7

OpenGL: ejemplo 1● Renderización de un rectángulo

Page 8: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

8

gluOrtho2D

(0,0)x

y

1

1

Page 9: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

9

gluOrtho2D

(0,0)x

y

1

1

Page 10: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

10

gluOrtho2D

(0,0)x

y

1

1

Page 11: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

11

gluOrtho2D

(0,0)x

y

1

1

Page 12: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

12

OpenGL: ejemplo 2● Rendering de una textura (ejemplo del redbook)

Page 13: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

13

OpenGL: Texturas

Page 14: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

14

OpenGL: Texturas

0 1s

1

t

Page 15: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

15

OpenGL: Texturas

0 1s

1

t

Page 16: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

16

OpenGL: Texturas

0 1s

1

t

Page 17: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

17

OpenGL: ejemplo 3● Rendering de una textura (ejemplo modificado del

redbook)

Host Device

Image Image Texture

Display

Page 18: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

18

OpenGL: ejemplo 4● Rendering de una textura (ejemplo del redbook

usando PBO)

Host Device

Image

Image Texture

Display

Image PBO

Page 19: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

19

OpenGL: ejemplo 4● Ejercicio: Modificar los valores de los texels

usando un kernel

Host Device

Image

Image Texture

Display

Image PBO

CUDAKernel

Page 20: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

20

OpenGL: ejemplo 5● Ejercicio: codificar un kernel de filtraje

0 1 01 1 10 1 0

Page 21: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

21

OpenGL: ejemplo 5● Ejercicio: codificar un kernel de filtraje

Host Device

Image

Image Texture

Display

Image PBO

Image CudaTex

CUDAKernel

0 1 01 1 10 1 0

Page 22: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

22

OpenGL: Texturas● Rendering de una textura (a partir de una imagen)

Page 23: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

23

OpenGL: Imágenes● Sin compresión● Con compresión

Page 24: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

24

OpenGL: Imágenes● Sin compresión: son usados para reducir el

espacio para almacenamiento y aumentar la velocidad de transmisión

● Compresión sin pérdida: cada píxel original puede ser reproducido exactamente ● Ejemplo: formato GIF (8 bits)

● Compresión con pérdida: cada píxel es reproducido aproximadamente● Permite mejores tasa de compresión● Ejemplo: formato JPEG (8/24 bits). No soporta

transparencia

Page 25: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

25

OpenGL: Imágenes● Sin compresión: son usados para reducir el

espacio para almacenamiento y aumentar la velocidad de transmisión

● Compresión sin pérdida: cada píxel original puede ser reproducido exactamente ● Ejemplo: formato GIF (8 bits)

● Compresión con pérdida: cada píxel es reproducido aproximadamente● Permite mejores tasa de compresión● Ejemplo: formato JPEG (8/24 bits). No soporta

transparencia

Page 26: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

26

OpenGL: Imágenes● Sin compresión: familia PNM (portable anymap

format)● PPM (pixmap)

– 1 bit por píxel (P1/P4)

● PGM (graymap)– 8 bits por píxeles (P2/P5)

● PBM (bitmap)– 24 bits por píxeles (P3/P6)

Page 27: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

27

OpenGL: Imágenes● Sin compresión: familia PNM

● PPM (pixmap)– 1 bit por píxel (P1/P4)

Page 28: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

28

OpenGL: Imágenes● Sin compresión: familia PNM

● PGM (graymap)– 8 bits por píxeles (P2/P5)

Page 29: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

29

OpenGL: Imágenes● Sin compresión: familia PNM

● PBM (bitmap)– 24 bits por píxeles (P3/P6)

Page 30: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

30

OpenGL: Imágenes● Ejercicio

● Codifique una rutina para cargar una imagen de un archivo PPM

● Codifique filtros para procesamiento de imágenes

SharpenBlur

Edge enhance

Edge detect

Emboss

Page 31: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

31

OpenGL: Imágenes

Page 32: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

32

OpenGL 3D

Page 33: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

33

OpenGL 3D● Modificar la geometría (los vértices) de un modelo

Page 34: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

34

OpenGL 3D● Modificar la geometría (los vértices) de un modelo

Page 35: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

35

OpenGL 3D● Modificar la geometría (los vértices) de un modelo

Page 36: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

36

Modelos 3D

Page 37: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

37

Modelos 3D

Page 38: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

38

Modelos 3D

Modelos de superficie Modelos volumétricos

Page 39: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

39

Modelos 3D

Modelos de superficie Modelos volumétricos

Page 40: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

40

Modelos de superficies● Paramétricas● Puntos● Polígonos (mallas)

Page 41: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

41

Mallas● Ventajas

● Generalidad para aproximar objetos de topología arbitraria– Exactitud arbitraria

● Hardware especializado

● Desventajas● Gran número de

polígonos (memoria)– Superficies curvas

complejas y con muchos detalles

● Superficies son aproximadas dentro de una precisión fija

Page 42: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

42

Mallas● Aproximación lineal por partes de superficies

complejas● Hoy en día las mallas de triángulos 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 producción de cine

Page 43: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

43

Mallas● Consiste de dos componentes

Page 44: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

44

Mallas● Consiste de dos componentes

● Geométrico

Las posiciones de los vértices definen la geometría de la superficie

Page 45: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

45

Mallas● Consiste de dos componentes

● Geométrico

● Topológico

Las posiciones de los vértices definen la geometría de la superficie

La adyacencia de vértices, aristas y polígonos define la topología de la superficie

Page 46: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

46

Mallas● Estructuras de datos

● Punteros para lista de vértices● Punteros para lista de aristas● Winged-Edge ● Half-Edge● Face-Edge, Quad-Edge, Radial-Edge

Page 47: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

47

Mallas● La descripción de la ED halfedge es simple, sin

embargo, su implementación eficiente (tiempo/memoria), robusta y fácil de usar no lo es

● Se sugiere usar implementaciones opensource● Bibliotecas C++

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

Page 48: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

48

Mallas● Formatos de archivos

● Categorías: Ascii o Binario● Tipos

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

Page 49: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

49

Mallas● Formato OFF

Page 50: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

50

MallasIdentificador

N. de vértices N. de polígonos

Geometría

Topología

● Formato OFF

Page 51: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

51

Mallas

v2

v4

v3

v1

f1

f2

● ED simple

Page 52: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

52

Mallas

v2

v4

v3

v1

f1

f2

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

● ED simple

Page 53: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

53

El futuro

Page 54: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

54

El presente● Tradicionalmente, para mejorar el desempeño solo

se requería cambiar de hardware● Sin embargo, en la actualidad ...

– Hardware– Software (oportunidad para programadores!)– http://arstechnica.com/articles/paedia/gpu-sweeney-

interview.ars– http://www.sciencedaily.com/releases/2008/09/080916155058.

htm

Page 55: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

55

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 High-Performance Graphics and General-Purpose Computation – http://http.developer.nvidia.com/GPUGems2/gpugems2_part01.html

● The Cg Tutorial– http://http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter01.ht

ml

Page 56: CUDA + OpenGL - Laboratorio de Computación Distribuida ... · 2D y 3D Provee ... 18 OpenGL: ejemplo 4 ... The Cg Tutorial

56

Recursos● Code

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