Creando modelos

Cuando necesitas dibujar modelos complejos es muy costoso llamar a todas las funciones diferentes una y otra vez en cada step. Para evitarte esto, puedes crear modelos. Un modelo consiste de un número de primitivas y formas de dibujo. Una vez que creas un modelo puedes dibujarlo en diferentes lugares y en diferenes posiciones con una simple llamada a ese modelo.

 

Antes de listar las funciones de modelos es importante resaltar un aspecto: el manejo de texturas. Como ya se ha explicado antes, las texturas se toman de sprites y backgrounds. Los índices de las texturas pueden ser diferentes en cada momento, por lo que los modelos no contienen información sobre ellas. Sólo cuando dibujas un modelo debes especificar información sobre la textura. De esta forma, sólo puedes usar una textura en cada modelo. Si necesitas usar más texturas puedes combinar varias (y tener mucho cuidado con las coordenadas de cada una) o usar múltiples modelos. La ventaja de esto es que puedes dibujar sencillamente el mismo modelo con diferentes texturas.

Para crear, cargar, guardar y dibujar modelos se usan las siguientes funciones:

d3d_model_create() Crea un nuevo modelo y devuelve su índice, que debe ser usado en las demás funciones.
d3d_model_destroy(ind) Destruye el modelo especificado, liberando memoria.
d3d_model_clear(ind) Limpia el modelo especificado, eliminando todas sus primitivas.
d3d_model_save(ind,fname) Salva el modelo ind al archivo especificado en fname.
d3d_model_load(ind,fname) Carga el modelo desde el archivo especificado.
d3d_model_draw(ind,x,y,z,texid) Dibuja el modelo en la posición (x,y,z). texid es la textura que se aplicará al modelo. Usa -1 para no usar texturas. Si quieres rotar o escalar el modelo usa las rutinas de transformación descritas en el apartado de Transformaciones.

Para cada primitiva existe una función equivalente que la añade a un modelo. Estas funciones se usan igual que las que ya hemos visto en los capítulos anteriores, sólo que en lugar de especificar una textura ahora daremos el índice del modelo.

d3d_model_primitive_begin(ind,kind) Añade al modelo una primitiva 3D del tipo siguiente indicado en kind: pr_pointlist, pr_linelist, pr_linestrip, pr_trianglelist, pr_trianglestrip o pr_trianglefan.
d3d_model_vertex(ind,x,y,z) Añade el vértice (x,y,z) al modelo.
d3d_model_vertex_color(ind,x,y,z,col,alpha) Añade el vértice (x,y,z) al modelo con su propio color y valor de transparencia.
d3d_model_vertex_texture(ind,x,y,z,xtex,ytex) Añade el vértice (x,y,z) al modelo con la posición (xtex,ytex) en la textura.
d3d_model_vertex_texture_color(ind,x,y,z,xtex,ytex,col,alpha) Añade el vértice (x,y,z) al modelo con valores de textura y color.
d3d_model_vertex_normal(ind,x,y,z,nx,ny,nz) Añade el vértice (x,y,z) al modelo con el vector normal (nx,ny,nz).
d3d_model_vertex_normal_color(ind,x,y,z,nx,ny,nz,col,alpha) Añade el vértice (x,y,z) al modelo con el vector normal (nx,ny,nz) y sus propios valores de color y transparencia.
d3d_model_vertex_normal_texture(ind,x,y,z,nx,ny,nz,xtex,ytex) Añade el vértice (x,y,z) al modelo con el vector normal (nx,ny,nz) y coordenadas de textura (xtex, ytex).
d3d_model_vertex_normal_texture_color(ind,x,y,z,nx,ny,nz,xtex,ytex,col,alpha) Añade el vértice (x,y,z) al modelo con el vector normal (nx,ny,nz) con valores de color y textura.
d3d_model_primitive_end(ind) Finaliza la descripción de la primitiva en el modelo.

Además de primitivas también puedes añadir formas al modelo. Las funciones son análogas a las ya vistas usando el índice del modelo en lugar del de la textura:

d3d_model_block(ind,x1,y1,z1,x2,y2,z2,hrepeat,vrepeat) Añade un bloque al modelo.
d3d_model_cylinder(ind,x1,y1,z1,x2,y2,z2,hrepeat,vrepeat,closed,steps) Añade un cilindro al modelo.
d3d_model_cone(ind,x1,y1,z1,x2,y2,z2,hrepeat,vrepeat,closed,steps) Añade un cono al modelo.
d3d_model_ellipsoid(ind,x1,y1,z1,x2,y2,z2,hrepeat,vrepeat,steps) Añade una elipsoide al modelo.
d3d_model_wall(ind,x1,y1,z1,x2,y2,z2,hrepeat,vrepeat) Añade una pared al modelo.
d3d_model_floor(ind,x1,y1,z1,x2,y2,z2,hrepeat,vrepeat) Añade un suelo al modelo.

El uso de modelos puede aumentar considerablemente la velocidad de los gráficos en los juegos 3D, así que deberías usarlo siempre que sea posible.