Informática Industrial

David Jurado González: david.jurado@uah.es.

 

A partir de ahora en esta página pondré los programas que vaya desarrollando o modificando (que son muchos a lo largo del año). De esta forma espero que no perderlos en algún CD-ROM de seguridad.

 

Quake 3 Map loader

Quake3_Map_loader_collision

Quake3 BSP Loader3 modificado

(29-oct-2003)

He añadido un rudimentario sistema de detección de colisiones basado en el documento Quake 3 BSP Collision Detection de Nathan Ostgard. He modificado GLEW para que todas las variables globales estén dentro de una estructura.

(23-oct-2003)

Esta es una modificación del programa Quake3 BSP Loader3 de DigiBen que apareció en  www.gametutorials.com.

En esta ocasión se ha utilizado SDL para la versión de Windows, lo que permite mantener un mismo fuente en Windows y Linux.

Se incluyen archivos de proyecto para Visual C++.NET y para Dev-C++ (Mingw).

Para la carga de extensiones de OpenGL se utiliza GLEW lo que simplifica su gestión.

Se ha incluido soporte para el uso de texturas comprimidas mediante ARB_texture_compression (sólo para materiales, no para los mapas de iluminación). En realidad es muy sencillo utilizar esta extensión ya que lo único necesario es especificar un formato interno de datos comprimidos en el momento de crear la textura. Es responsabilidad de OpenGL comprimirlas con algún método. (No se cargan las texturas ya comprimidas.)

Además ahora la geometría se almacena en la memoria de la tarjeta gráfica mediante la extensión ARB_vertex_buffer_object para que en tiempo de ejecución no se sature el bus AGP por enviarle la información de los vértices.

Ya que la extensión ARB_vertex_buffer_object es relativamente nueva sólo funciona en tarjetas que tengan los drivers actualizados. En una ATI 9500 se consigue una mejora del rendimiento de un 25%. Esta mejora es más acusada cuantos más polígonos tenga la escena. Usar la tecla [F2] para conmutar el uso de la extensión y comparar los rendimientos.

Skinnedmesh_Clone.SRC.rar

Skinned Mesh con clonación

En esta versión se cuenta con un método que clona al modelo origina compartiendo la información de VertexBuffers e IndexBuffers y del skinning. De esta forma se pueden tener un montón de ejemplares en juego con una sola copia de la información en la tarjeta gráfica.

Cada mesh utiliza una parte de información compartida y otra específica del modelo.

El rendimiento es inversamente proporcional al número de modelos en pantalla.

SkinnedMesh_NormalMaps.BIN

SkinnedMesh_NormalMaps.SRC

Skinned Mesh.

Esta es una versión modificada del programa  Modular D3D SkinnedMesh de Phil Taylor que apareció en flipcode: http://www.flipcode.com/articles/article_dx9skinmeshmod.shtml

Incorpora algunas modificaciones que permiten usar un mapa de normales para conseguir sombreado a nivel de pixel. Ahora las ropas de Tiny tienen un aspecto más arrugado.

Posibles modificaciones futuras:

bulletHacer que la versión de relieves funcione en tarjetas sin Pixel shaders pero con Dot3 bump mapping (como la GeForce 256).
bulletModificar el bitmap de color para que no tenga tanto contraste en la versión bump.
bulletModificar los vectores de luz difusa y especular para aumentar el efecto (que no se queden pegados a la cámara).

Datos de rendimiento en un Athlon 800MHz con Radeon 9000 Pro:

bulletVersión D3D non-Indexed - 610 fps
bulletVersión VertexShader - 746 fps (sin relieve)
bulletVersión HLSL con normal mapping - 619 fps

Notas:

bulletHLSL sin relieve ofrece un resultado equiparable al de Vertex shader-> Sobre los 740fps limitándose creo por el fill rate.
bulletCambiando la tarjeta por una Radeon 8500 los resultados son muy similares.
English remix:
Improved Skined Mesh with normal mapping.
 
Keywords: Matrix palette skinning, per-pixel lighting, dot3 bump mapping, normal mapping, DirectX 9.0 HLSL.
 
            This is a re-modified version of the Modular D3D SkinnedMesh article by Phil Taylor (http://www.flipcode.com/articles/article_dx9skinmeshmod.shtml).
 
            It has a few bug fixes:
            - Corrected decorated names of some functions arguments.
            - No more aligned args in functions arguments.
            - It now compiles under VC++.NET.
            - It can be switched the skinning method (like the original sample).
 
 
            The HLSL version has been improved: Tiny now has a bump mapped look. It uses a normal map taken from the nVidia SDK. It also includes a small pixel shader for the bump effect. This could be easily changed into a Fixed Function version if you'd like to work with old hardware DOT3 capable like GeForce 256.


 
Si tiene problemas o preguntas relacionadas con este Web, póngase en contacto con david.jurado@uah.es.
Última actualización: 30 de octubre de 2003.