12
1 OpenGL VyGLab Lab. de Investigación y Desarrollo en Visualización y Computación Gráfica Dpto. de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur El pipeline gráfico En los inicios de la CG todos los aspectos del proceso gráfico eran programables. Las APIs permitieron escribir programas gráficos muy buenos y mucho más fácilmente porque cubrían muchas de las funcionalidades del proceso gráfico. Pero se pagaba el precio de no poder hacer todo lo que la API no podía hacer. A medida que se desarrollaron los procesadores gráficos se desarrollaron funcionalidades específicas para soportar la programación de características que las APIs de funcionalidad fija no permitían. Esta funcionalidad tiene ahora sus estándares incluyendo el lenguaje GLSL que es parte del estándar OpenGL 2.1. Los shaders son los programas que pueden cargarse en las tarjetas gráficas para llevar a cabo operaciones fuera de las del pipeline de funcionalidad fija. CG 2013

Diseño, Gráficos y Animación por Computadoracs.uns.edu.ar/cg/TPs/1.2-IntroOpenGL-2013.pdf · 3 Qué es OpenGL •Open Graphics Library –Especificación de una API gráfica 3-D

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Diseño, Gráficos y Animación por Computadoracs.uns.edu.ar/cg/TPs/1.2-IntroOpenGL-2013.pdf · 3 Qué es OpenGL •Open Graphics Library –Especificación de una API gráfica 3-D

1

OpenGL

VyGLab – Lab. de Investigación y Desarrollo en Visualización

y Computación Gráfica

Dpto. de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

El pipeline gráfico

En los inicios de la CG todos los aspectos del proceso gráfico eran programables.

Las APIs permitieron escribir programas gráficos muy buenos y mucho más fácilmente

porque cubrían muchas de las funcionalidades del proceso gráfico. Pero se pagaba el

precio de no poder hacer todo lo que la API no podía hacer.

A medida que se desarrollaron los procesadores gráficos se desarrollaron

funcionalidades específicas para soportar la programación de características que las

APIs de funcionalidad fija no permitían.

Esta funcionalidad tiene ahora sus estándares incluyendo el lenguaje GLSL que es parte

del estándar OpenGL 2.1.

Los shaders son los programas que pueden cargarse en las tarjetas gráficas para llevar a

cabo operaciones fuera de las del pipeline de funcionalidad fija.

CG 2013

Page 2: Diseño, Gráficos y Animación por Computadoracs.uns.edu.ar/cg/TPs/1.2-IntroOpenGL-2013.pdf · 3 Qué es OpenGL •Open Graphics Library –Especificación de una API gráfica 3-D

2

La Interface del Programador

El programador ve al sistema gráfico a través de una interface de

software, la API (Application Programming Interface).

CG 2013

OpenGL es una API

Origen de OpenGL

Silicon Graphics (SGI) revolucionó las estaciones de trabajo gráficas

implementando el pipeline en hardware (1982). Los programadores de

aplicaciones usaban una librería denominada IRIS GL

IRIS GL permitió programar aplicaciones interactivas 3D de modo

relativamente simple.

El éxito de IRIS GL condujo al desarrollo de OpenGL (1992), una API

independiente de la plataforma que era:

Fácil de usar

Lo suficientemente cercana al hardware para tener una excelente

performance

Enfocada en el rendering

No posee primitivas para manejar ventanas o para obtener

entradas del usuario; tampoco posee primitivas de alto nivel para

describir modelos de objetos tridimensionales.

CG 2013

Page 3: Diseño, Gráficos y Animación por Computadoracs.uns.edu.ar/cg/TPs/1.2-IntroOpenGL-2013.pdf · 3 Qué es OpenGL •Open Graphics Library –Especificación de una API gráfica 3-D

3

Qué es OpenGL

• Open Graphics Library

– Especificación de una API gráfica 3-D

– “a software interface to graphics hardware”

– Librería de gráficos raster

• procesa vértices, normales y otros datos de una

escena

• Permite obtener pixels

– Es un estándar de la industria

• Soportado en muchas plataformas

– Mac OS, Windows, Linux, iPhone, PSP…

• Especificación públicamente disponible

CG 2013

Qué es OpenGL

Originalmente controlada por el Architectural Review Board (ARB)

Los miembros provenían de distintas empresas como SGI,

Microsoft, Nvidia, HP, 3DLabs, IBM,…….

Actualmente (desde 2006) es el Kronos Group

Era relativamente estable (hasta la versión 3.0)

Era compatible hacia atrás

Su evolución reflejó las nuevas capacidades que se desarrollaban

en el hardware

Programas de vértices y de fragmentos

Permite características específicas de la plataforma a través de las

extensiones.

.

CG 2013

Page 4: Diseño, Gráficos y Animación por Computadoracs.uns.edu.ar/cg/TPs/1.2-IntroOpenGL-2013.pdf · 3 Qué es OpenGL •Open Graphics Library –Especificación de una API gráfica 3-D

4

Qué es OpenGL

Una implementación de hardware de OpenGL usualmente toma

la forma de un driver de una tarjeta gráfica. En la Figura se

muestra su relación con la aplicación.

Las llamadas de la API OpenGL se pasan a un driver de HW.

La interfaz del driver se realiza directamente con el HW del

display gráfico.

CG 2013

OpenGL actualmente

La performance se logra utilizando extensivamente la GPU más que la

CPU

Se controla la GPU a través de programas que se denominan shaders

La tarea de la aplicación es enviar los datos a la GPU

Todo el rendering se realiza en la GPU

.

CG 2013

Page 5: Diseño, Gráficos y Animación por Computadoracs.uns.edu.ar/cg/TPs/1.2-IntroOpenGL-2013.pdf · 3 Qué es OpenGL •Open Graphics Library –Especificación de una API gráfica 3-D

5

El pipeline de Rendering de OpenGL

Vértices Primitivas Fragmentos Pixels

Escena Imagen Rasterizada

Procesamiento

Geométrico Rasterización

Operaciones

de Fragmentos

CG 2013

Qué es OpenGL

OpenGL no es un lenguaje de programación; es una API.

Cuando decimos que tenemos una aplicación OpenGL nos

referimos a que tenemos una aplicación escrita en algún

lenguaje de programación (tal como C, C++,...) que llama una o

más librerías de OpenGL.

Otros lenguajes de programación — tales como Visual Basic —

que pueden invocar funciones de librerías en C, también

pueden usar OpenGL. También se dispone de distintas formas

de hacer que OpenGL esté disponible para usarse desde

muchos otros lenguajes de programación.

CG 2013

Page 6: Diseño, Gráficos y Animación por Computadoracs.uns.edu.ar/cg/TPs/1.2-IntroOpenGL-2013.pdf · 3 Qué es OpenGL •Open Graphics Library –Especificación de una API gráfica 3-D

6

Qué es OpenGL

OpenGL es una máquina de estados

• El estado actual de OpenGL (llamado colectivamente contexto)

contiene datos que describen cómo debe llevarse a cabo el proceso

de rendering

• El estado no cambia hasta que se establezca explícitamente

• Cuando se debe renderizar, hay muchos factores que determinan

cómo se verá la escena. OpenGL se hace varias preguntas antes de

renderizar.

• Las respuestas a todas estas preguntas se encuentran en la

configuración del estado de renderizado que es seteado por el

programador.

CG 2013

Sintaxis de primitivas en OpenGL

Una vez que inicializamos el contexto de OpenGL y

configuramos el estado de renderizado, ¿cómo le decimos qué

dibujar?

Como OpenGL es una API de muy bajo nivel, el bloque básico

para el rendering es un vértice.

Los vértices consisten, como mínimo, en una posición; también

pueden contener normales, información de color y coordenadas

de textura. Esto es para el pipeline de funcionalidad fija.

Para almacenar un vértice podemos crear un objeto vértice o

podemos almacenar cada componente del mismo en un arreglo

separado.

CG 2013

Page 7: Diseño, Gráficos y Animación por Computadoracs.uns.edu.ar/cg/TPs/1.2-IntroOpenGL-2013.pdf · 3 Qué es OpenGL •Open Graphics Library –Especificación de una API gráfica 3-D

7

Sintaxis de primitivas en OpenGL

Podemos decir entonces que las funciones de OpenGL son de

2 tipos:

Generación de primitivas

Generan una salida en el display si la primitiva es visible

El estado controla cómo se procesan los vértices de las

primitivas y cuál es la apariencia de la misma

Cambios de estado

Funciones de transformación

Funciones de atributos

Bajo el OpenGL 3.1 la mayoría de las variables de estado

están definidas por la aplicación y enviadas a los shaders

CG 2013

Sintaxis de primitivas en OpenGL

Las primitivas comienzan con el prefijo gl, seguido de una

mayúscula para cada una de las palabras que constituyen la

primitiva:

glClearColor()

Las constantes se definen también comenzando por GL y usan

letras mayúsculas. Las palabras se separan con guión bajo:

GL_COLOR_BUFFER_BIT

Todas las funciones de OpenGL tienen el siguiente formato:

<Prefijo librería><Primitiva><cant de arg:opc><tipo de arg: opc>

Ejemplo:

glColor3f(...), glVertex3f(...)

CG 2013

Page 8: Diseño, Gráficos y Animación por Computadoracs.uns.edu.ar/cg/TPs/1.2-IntroOpenGL-2013.pdf · 3 Qué es OpenGL •Open Graphics Library –Especificación de una API gráfica 3-D

8

Sintaxis de primitivas en OpenGL

Ejemplo

CG 2013

glUniform3f(x,y,z)

Pertenece a la librería GL

Nombre de la función

x,y,z son floats

glUniform3fv(p)

p es un puntero a un arreglo

dimensiones

Sintaxis de primitivas en OpenGL

Hay varias maneras de pasar a OpenGL la información de los

vértices. La más simple es el modo inmediato.

A partir de la versión 3.1 ya no se puede usar. No era eficiente

en términos de velocidad de uso de memoria. La información se

delimitaba mediante los comandos glBegin y glEnd.

Para pasar información de los vértices se usaban, por ejemplo,

las funciones glVertex, glNormal, glColor y glTexCoord.

glBegin(GL_POINT);

glNormal3f(0,0,1);

glColor4f(1,0,0,0.5);

glVertex3f(0, 1, 2.5);

glEnd();

CG 2013

Page 9: Diseño, Gráficos y Animación por Computadoracs.uns.edu.ar/cg/TPs/1.2-IntroOpenGL-2013.pdf · 3 Qué es OpenGL •Open Graphics Library –Especificación de una API gráfica 3-D

9

Versión OpenGL Versión GLSL Fecha

1.0 1992

1.1 1997

1.2 1998

1.3 2001

1.4 2002

1.5 2003

2.0 1.0 2004

2.1 1.2 2006

3.0 1.3 2008

3.1 1.4 2009

3.2 1.5 2009

3.3 3.3 2010

4.0 4.0 2010

4.1 4.1 2010

4.2 4.2 2011

4.3 4.3 2012 CG 2013

OpenGL 3.1

Está totalmente basado en shaders

NO hay shaders por defecto

Cada aplicación debe proveer tanto un shader de vértices como

uno de fragmentos

No permite el modo inmediato

Tiene pocas variables de estado

No se requiere compatibilidad hacia atrás

.

CG 2013

Page 10: Diseño, Gráficos y Animación por Computadoracs.uns.edu.ar/cg/TPs/1.2-IntroOpenGL-2013.pdf · 3 Qué es OpenGL •Open Graphics Library –Especificación de una API gráfica 3-D

10

public Triangulo()

{

posicionVertices = new Vector4[]{

new Vector4(-0.5f, 0.0f, 0.0f, 1.0f),

new Vector4(0.5f, 0.0f, 0.0f, 1.0f),

new Vector4(0.0f, 0.75f, 0.0f, 1.0f),

};

crearVBO();

}

private void crearVBO()

{

GL.GenBuffers(1, out triangVBO);

GL.BindBuffer(BufferTarget.ArrayBuffer, triangVBO);

GL.BufferData(BufferTarget.ArrayBuffer, new IntPtr(posicionVertices.Length * Vector4.SizeInBytes), posicionVertices, BufferUsageHint.StaticDraw);

GL.BindBuffer(BufferTarget.ArrayBuffer, 0);

} CG 2013

OpenGL y GLSL

GLSL es el lenguaje de shaders de OpenGL

Es C-like con

Tipos definidos para matrices y vectores (2, 3, 4 dimensional)

Operadores sobrecargados

Constructores como C++

Similar a Cg de Nvidia y a HSLS de Microsoft

El código es enviado a los shaders como código fuente

Hay nuevas funciones de OpenGL para compilar, linkear y obtener

información de los shaders

.

CG 2013

Page 11: Diseño, Gráficos y Animación por Computadoracs.uns.edu.ar/cg/TPs/1.2-IntroOpenGL-2013.pdf · 3 Qué es OpenGL •Open Graphics Library –Especificación de una API gráfica 3-D

11

string fragmentShaderSource = @"

#version 130

out vec4 colorSalida;

flat in vec4 elColor;

void main()

{

colorSalida = elColor;

}";

CG 2013

Otras versiones de OpenGL

OpenGL ES

Sistemas embebidos

Versión 1.0 (OpenGL 2.1 simplificado)

Version 2.0 (OpenGL 3.1 simplificado)

Basado en shaders

WebGL

Implementación Javascript de ES 2.0

Soportado en los browsers más nuevos

OpenGL 4.1 y 4.2

Adiciona shaders geométricos y teseladores

.

CG 2013

Page 12: Diseño, Gráficos y Animación por Computadoracs.uns.edu.ar/cg/TPs/1.2-IntroOpenGL-2013.pdf · 3 Qué es OpenGL •Open Graphics Library –Especificación de una API gráfica 3-D

12

Bibliografía

Angel, E., Shreiner, D. Interactive Computer Graphics: A top-down approach with shader-based

OpenGL, Addison Wesley, 6th. Ed., 2011.

Buss, S., 3-D Computer Graphics, A Mathematical Introduction with OpenGL, Cambridge

University Press, New York, 2003.

Foley, J., van Dam, A., Feiner, S. y Hughes, J., Computer Graphics. Principles and Practice,

Addison Wesley, 1992, 2nd Edition.

Hill, F. Jr, Kelley, S., Computer Graphics Using OpenGL, Prentice Hall, 3rd Ed., 2006.

Rost, R., Licea-Kane, B., Ginsburg, D., Kessenich, J., OpenGL Shading Language, Addison-

Wesley Professional, 3rd Edition, 2009.

Shreiner, D., The Khronos OpenGL ARB Working Group, OpenGL Programming Guide: The

Official Guide to Learning OpenGL, Versions 3.0 and 3.1 7th Edition, 2009.

Wright, R., Haemmel, N., Sellers, G., Lipchak, B., OpenGL Superbible: Comprehensive Tutorial

and Reference, Addison-Wesley Professional; 5th edition, 2010.

http://openglbook.com/the-book/

http://arcsynthesis.org/gltut/index.html

CG 2013

CG 2013