int create_bitmap_3d( int id_file, int id_graph, CDIV_2D_POINT dimension, CDIV_2D_POINT centro, int tipo_textura )


Retorna:

 El código del objeto 3D creado o (0) si no pudo crearlo.

Descripción:

Crea una imagen 3D con el gráfico que se le pasa como parámetro además de las dimensiones, el centro y el tipo de textura de la imagen. Esta imagen sería conveniente que sea múltiplo de 2 en sus valores de ancho y alto (es decir tendría que valer 2, 4, 8, 16, 32, 64, ...). En el caso de no ser múltiplo de 2 se creará una imagen virtual a partir de esta que sea múltiplo de 2.

El tipo de textura puede ser:

 - M3D_TX_ZOOM : La imagen será ampliada o reducida según sea el tamaño especificado.
 - M3D_TX_TILED: La imagen se repite completando el tamaño (si se especifica esta opción el tamaño del gráfico a de ser obligatoriamente múltiplo de 2 ya que sino se completaría con negro) - M3D_TX_ZOOM_MASK : La imagen será ampliada o reducida según sea el tamaño especificado, los pixels del color de la máscara de la textura son ignorados "En bitmaps de 256 colores es cero, y en bitmaps truecolor es rosa fucsia (rojo y azul al máximo, verde a cero)", permitiendo que la textura sea transparente. - M3D_TX_TILED_MAKS: la imagen será ampliada o reducida según sea el tamaño especificado, los pixels del color de la máscara de la textura son ignorados "En bitmaps de 256 colores es cero, y en bitmaps truecolor es rosa fucsia (rojo y azul al máximo, verde a cero)", permitiendo que la textura sea transparente.

Se devuelve como valor de retorno el código del objeto 3D, que es un valor numérico que debe especificarse para utilizar el gráfico, en la variable object3d o, en general, en todas las funciones que requieran un código del objeto 3D entre sus parámetros.

Es posible crear tantos objetos 3D como sea necesario; cada vez que se cree uno la función devolverá el código que le corresponde.

Ejemplo de utilización de la función:


int objeto3d;

PROCESS_INIT( objeto )(int tx)
 BEGIN_INIT
  x = tx;
 END_INIT
BEGIN
 ctype = c_3d_object;
 
 object3d = objeto3d;
 
 size = 100;
 
 z = 100;
 y = -100;
 
 LOOP
 {  
  angle3d.y += 5000;
  
  FRAME;
 }
END

MAIN_PROGRAM_CDIV
PRIVATE
 int fichero;
 
BEGIN_PROGRAM 

    set_gfx(GFX_AUTODETECT_WINDOWED);
    
    set_depth(16);
    
    set_mode(m640x480);
    
    x = 0;
    y = -100;
    z = -1000;
    
    write(0,0, 0,0, "Pulse 'up' o 'down' para avanzar o retroceder");
    write(0,0,10,0, "Pulse 'left' o 'right' gira la camara izquierda o derecha");
    write(0,0,20,0, "Pulse 'a' o 's' inclinar la camara arriba o abajo");
    write(0,0,30,0, "Pulse 'q' o 'w' girar la camara horizontalmente");
    
    
    fichero = load_fpg("../help.fpg");
    
    CDIV_2D_POINT dim(200, 100);
    CDIV_2D_POINT centro(0, 0);
    
    objeto3d = create_bitmap_3d( fichero, 10, dim, centro, M3D_TX_ZOOM );
    
    start_3d(0, fichero, 9, 10000, 10000, 0, this);
    
    new objeto(0);
    new objeto(-500);
    new objeto(500);
    
    // Nos movemos en el espacio 3D
    LOOP{
     if( key(_a) )
      angle3d.x += 1000;
      
     if( key(_s) )
      angle3d.x -= 1000;
      
     if( key(_q) )
      angle3d.z += 1000;
      
     if( key(_w) )
      angle3d.z -= 1000;
     
     if( key(_left) )
      angle3d.y += 5000;
      
     if( key(_right))
      angle3d.y -= 5000;
      
     if( key(_up))
      advance3d(5);
      
     if( key(_down))
      advance3d(-5);
      
     if( key(_enter))
      stop_3d(0);
     
     FRAME;
    }

END_PROGRAM

En el ejemplo se crea una imagen 3d con gráfico pasado como parámetro, una dimensión, un centro y un tipo de textura con la función create_bitmap_3d() guardando el código del objeto 3d que retorna en la variable global objeto3d.

La función unload_object3d() permiten liberar la memoria del ordenador utilizada por el objeto 3D cuando ya no se va a utilizar más durante un tiempo, y para ello requieren también el código del objeto 3D, para saber qué objeto es el que se quiere destruir.

No es necesario descargar el objeto 3D de memoria antes de finalizar el programa, ya que el sistema lo hará de forma automática.


Ver: object3d - unload_object3d() - create_box_3d()