OpenGL

De Codepixel

Contenido

[editar] Overview

[editar] OpenGL 3.1

Las novedad principal es que esta nueva versión no es compatible con versiones anteriores, ya que todo lo "deprecated" ha sido eliminado en esta nueva versión, respondiendo al clamor de la comunidad. Es una buena idea que los drivers se limpien, y una nueva API sea realmente eso, una nueva API. El avance de la librería no invalida las versiones anteriores, que pueden seguir utilizándose.Se deja al fabricante la posibilidad de mantener antigua funcionalidad usando extensiones ARB.

Se incluye soporte para intanciar geometría, usando datos de vértices en la memoria de la tarjeta.

Se pueden copiar buffers internamente en la memoria de la tarjeta. Con esto se da soporte a OpenCL para programación genérica de la GPU.

Texture Buffer Objects permiten crear arrays de cualquier formato de 1 dimensión de gran tamaño, accesible a los shaders y a otro tipo de API's.

Uniform Buffer Objects, permiten definir bloques de memoria uniforme compartida entre shaders, permitiendo intercambiar información de forma eficiente en los programas.

Más samples de textura en los shaders, ampliando a 16 por shader.

El lenguaje de shaders se actualiza al GLSL 1.4, dando soporte a los texture buffer objects, y los uniform buffer objects.Incluye soporte paraID's en las instancias, y se eliminan partes marcadas "deprecated" anteriormente.

[editar] OpenGL 3.2

Novedades que incorpora:

  • Geometry shaders: Igual que la extensión que ya había, pero ya es

parte del core.

  • Layered Rendering: Cualquier textura 2D (FBOs, etc) puede tener

varias capas. El geometry shader puede especificar a qué capa envía cada primitiva (gl_Layer). Esto permite renderizar algo en todas las caras de un cubemap en un único pase, por ejemplo.

  • Flat shading de variables de GLSL: Si especificas que el varying es

flat, la variable no se interpola entre los vértices de la primitiva. Por defecto se toma el valor del último vértice de la primitiva, pero también se puede pedir que use el primero.

  • Disable Depth clipping: Permite eliminar el near y el far plane,

teniendo depth buffers no limitados al rango [0,1]

  • Texturas multisample: Toda textura 2D puede tener varios samples en

cada texel, incluyendo los FBOs. Han metido también instrucciones de GLSL para leer samples concretos de una textura. Esto permite generar un FBO multisampleado, y luego hacerle un pase al FBO leyendo todos sus samples --> Deferred shading+ MSAA !! (Tengo la impresión de que esto lo han implementado usando los layers de antes, siendo cada layer un grupo de samples...)

  • Seamless cubemaps: El filtrado de texturas en los bordes de las

imágenes de un cubemap ahora lee las imágenes adyacentes para hacer el filtrado linear.

  • Sync objects : permiten esperar (hacer un wait) a que OpenGL termine

una determinada operación, o comprobar si la ha terminado ya (es como glFinish, pero más fino). Tiene timeouts e informa de si ha habido errores en la ejecución. Todavía no está implementado, pero está pensado para poder hacer waits a comandos concretos (para OpenGL 3.3, supongo).

  • Headers especificos: Una cosa interesante es que han creado los headers gl3.h y gl3ext.h, y

en ellos solamente están las cosas de OpenGL 3.2. Si quieres usar algo de OpenGL más viejo, tienes que hacer un include de gl.h. Así puedes garantizar que no estás usando algo deprecado, simplemente no metiendo el include a gl.h

Cosas que se han quitado:

  • glLineWidth
  • Un par de constantes de la API.

Enlaces:

[editar] Vertex Arrays and VBO

[editar] Texturas

[editar] Compresión de Texturas

La idea es que las texturas utilizen menos memoria en la tarjeta. Para ello, se define la extensión GL_ARB_texture_compression y EXT_texture_compression_s3tc.

Using texture compression in OpenGL : tutorial de nvidia

nvidia texture tools : permite comprimir imagenes. Incluye todo el codigo fuente.

[editar] Pixel Buffer Object PBO

Pixel Buffer Objects simplemente es la extensión de usar Vertex Buffer Objects, pero con extensiones para que ciertos comandos puedan leer o escribir pixeles a memoria gestionada por el driver. La gran ventaja es que estas copias pueden hacerse de modo asíncrono, aprovechando el DMA propio de la tarjeta.

  • ompf.org : hablando sobre el tema para enviar una textura cada fotograma.

[editar] Frame Buffer FBO

[editar] Optimizaciones

http://castano.ludicon.com/blog/2009/02/02/optimal-grid-rendering/ : Mallas óptimas http://home.comcast.net/~tom_forsyth/papers/fast_vert_cache_opt.html : Optimización de caches de vertices

[editar] Mallas enormes

http://www.sci.utah.edu/~bavoil/opengl/bavoil_trimeshes_2005.pdf : Estudio de técnicas para renderizar mallas enormes

[editar] Skin Animation

[editar] Camaras

[editar] Normal Mapping

[editar] Multitexture

[editar] Mesa GL

en ${SolutionDir}\lib\mesagl\Mesa-7.0.3\ estan los proyectos para compilar las DLL gears.exe es un ejecutable para testear si funciona correctamente

[editar] Librerias de carga de extensiones

[editar] Windows

  • [1] llamadas a windows

[editar] Alpha blending

http://www.idevgames.com/forum/archive/index.php/t-1232.html : simple alpha blending

http://www.bigpanda.com/trinity/article2.html : tutorial de alpha blending

[editar] Lighting

[editar] GLSL

[editar] GLSL tutorials

[editar] Tools

[editar] Uniform Variables

[editar] GUI

Biblotecas que renderizan la interfaz en nuestro viewport de OpenGL:

Bibliotecas que permiten embeber OpenGL como un widget más:

[editar] GLUT

Herramientas personales
../skins/common/images/wiki.png);" href="/index.php/Portada" title="Visitar la página principal">