int create_box_3d( int id_file, int id_graph )


Retorna:

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

Descripción:

Crea un cubo en 3D con el gráfico que se le pasa como parámetro. Esta imagen ha de ser 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 la imagen no se cargará no pudiéndose visualizar el cubo.

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 = -200;
 
 LOOP
  FRAME;
END

MAIN_PROGRAM_CDIV
PRIVATE
 int fichero;
 
BEGIN_PROGRAM 

    set_gfx(GFX_AUTODETECT_WINDOWED);
    
    set_depth(16);
    
    set_mode(m640x480);
    
    x = 0;
    y = -180;
    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");
    
    objeto3d = create_box_3d( fichero, 10 );
    
    object3d = objeto3d;
    
    start_3d(0, fichero, 9, 10000, 10000, 0, this);
    
    new objeto(0);
    new objeto(-500);
    new objeto(500);
    
    m3d[0].distance.z = 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 crean varios cubos 3d con gráfico pasado como parámetro con la función create_box_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_bitmap_3d()