15. Carga de modelos y uso de "Vertex arrays" |
![]() |
![]() |
Videojuegos - Curso de Programación de juegos | |||||||||||||||||||||||||||||||||||||||||||||||
Escrito por Vicengetorix | |||||||||||||||||||||||||||||||||||||||||||||||
Página 1 de 3 ![]() El tema no es facil. Tiene la complicacion inicial de conocer el formato del fichero donde esta el modelo. Luego la carga puede ser mas o menos laboriosa. Al final tendremos que tener el modelo cargado de forma que lo podamos pintar lo mas eficientemente posible. En nuestro caso usaremos el formato de modelos propio del programa Caligari truSpace, cuyos ficheros tienen extension ".COB". Lo haremos en su forma ASCII, los que se graban como fichero de texto y podemos editar con un sencillo editor. Esto pemite saber exactamente lo que hay dentro del fichero y no depender de unas especificaciones parciales y en ingles. Luego pintaremos el modelo usando el metodo de "vertex arrays". El primer aviso es para los que no tengan todavia el programa Caligari truSpace: Si no tienes el programa, bajatelo, pero ya. La ultima version es gratis porque la empresa ha sido comprada por Microsoft y no se sabe que va a ser de ella (que den el programa gatis es un mal presagio). El programa es totalmente funcional, con posibilidad de cargar modelos de varios formatos habituales, y grabarlos tambien a otros. Permite, ademas de modelar, hacer animaciones por huesos (esqueletales suena mal) y tambien permite convertirlas a animaciones por vertice. Permite triangular los modelos y no se que mas cosas. Un programa en condiciones, vaya, y totalmente gratis. Ademas el formato .COB en ASCII nos dara la facilidad de entender bien que es cada cosa. Veremos primero como es este formato para luego ver como lo cargamos. Lo primero sera abrir un fichero .COB que se haya guardado en truSpace con la pestaña de ASCII en un editor de texto y ver como esta estructurado. Lo primero en un fichero de estos es algo asi:
Hay que decir que en este tipo de ficheros hay mucha morralla. De esto, pasaremos de todo. Hay dos lineas que empiezan con ThumbHeader y ZippedThumbnail que yo suelo borrar a mano porque acupan mucho y solo son un pequeño bitmap codificado para que se vea en el truSpace al meterlo en un repositorio (o algo asi). Luego puede haber la definicion de un grupo, de la que paso tambien. Al final iremos a las zonas que nos interesan.
PolH indica una malla de puntos. En nuestro caso, si el modelo esta formado por mas de una las uniremos y tendremos cargado una sola malla con el modelo completo. Luego estan el nombre y los datos de los ejes para esta malla que no vamos a usar (nunca me ha hecho falta). Despues tras la linea que pone Transform si que hay algo importante. Es una matriz de 4 x 4 que modifica cada uno de los vertices de esta malla, asi que tendremos que leerla para multiplicar cada vertice por esta matriz y asi obtener la posicion final. Despues lo mas importante. Pone World Vertices, los vertices de la malla, y luego el numero de vertices de esta malla. Luego la lista de coordenadas de los vertices. Tras los vertices, las coordenadas de textura.
Luego las caras de la malla, cada una con los indices de las coordenadas de vertice y de textura de cada vertice de la cara
Cada cara indica los vertices que tiene. En nuestro caso deberan ser siempre 3, triangulos (no siempre es asi si no tenemos cuidado de triangular el modelo antes de guardarlo). Tambien el indice material con que pintarla (cada malla tiene sus materiales). El formato de cada vertice es "<indice_de_vertice,indice_de_textura>", 3 por cara. Cuando termina con las caras hay una serie de lineas que no usaremos. Luego encontraremos uno o mas materiales por cada malla. Un ejemplo de material sin textura.
La definicion de material es mas larga pero solo usaremos las primeras lineas. La que pone mat# 0 es que es el material 0 (lo que ponia en cada cara). La que empieza en rgb es el color del material. la que empieza por alpha tiene factores que modificaran cada componente del material. Ya no vamos a usar mas datos si no hay textura. Si la hubiera apareceria asi.
Vemos que aparece una linea que empieza por texture que no aparecia antes y contiene el path completo del fichero de la textura. Nosotros, en nuestro programa despreciaremos el path y nos quedaremos solo con el nombre de fichero para colocarlo luego donde nos de la gana. Las texturas no son siempre del tamaño que le gusta a OpenGL. Si no lo es, basta con cambiar el tamaño a 128x256, 512x64, ... Tras esta linea, otra con los datos de offset y de repeticion de la textura. Esto tambien lo usaremos por si la textura fuera repetida y movida en el modelo. Eso es todo lo que vamos a usar para cargar un modelo. Las listas del vertices, coordenadas de textura y de caras pueden ser muy largas, pero es lo que realmente necesitamos. El que quiera investigar y usar mas cosas, adelante. Hay una cosa que no se si echareis de menos, las normales. Otros formatos las incluyen, este no. Tranquilidad, lo que haremos sera generarlas nosotros a partir de los vertices de las caras. Este es un modelo de ejemplo, el que usaremos en el programa del capitulo, sin texturas: triciclo.cob y este, otro con textura para probar: rino.cob y su textura: RHINO.jpg ¡Sólo los usuarios registrados pueden escribir comentarios!
3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved." |