int create_box_3d( int id_file, int id_graph, CDIV_3D_POINT dimension, CDIV_3D_POINT centro, int tipo_textura )
Retorna:
El código del objeto 3D creado o (0) si no pudo crearlo.
Descripción:
Crea un cubo 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 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.
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 = -64; 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 = -64; 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_3D_POINT dim( 500, 128, 200 ); CDIV_3D_POINT centro( 250, 64, 100 ); objeto3d = create_box_3d( fichero, 10, dim, centro, M3D_TX_TILED ); start_3d(0, fichero, 9, 10000, 10000, 0, this); new objeto(0); new objeto(-1000); new objeto(1000); // 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, una dimensión, un centro y un tipo de textura 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_box_3d()