class M3D_POLY_3D{ void set_corner( int n_esquina, int px, int py, int pz ); // Establece la esquinas void set_texture_point( int n_esquina, int px, int py ); // Establece los puntos de la textura void set_texture( int id_file, int id_graph, int tx_type, int tx_mode, int tx_flag ); // Establece la textura void set_render_type( int render_type ); // Establece el tipo de renderizado void set_distance( int dx, int dy, int dz ); // Establece la distancia hacia el centro de rotación void set_blender_mode( int blender_type, int ialpha ); // Establece el tipo de fundido y la intensidad void disable_blender_mode( ); // Desactiva el fundido int get_corners(); // Obtiene el número de esquinas unsigned char get_render_type(); // Obtiene el tipo de renderizado del polígono unsigned char get_blender_mode(); // Obtiene el modo de fundido del polígono unsigned char get_alpha(); // Obtiene la intensidad del fundido BITMAP * get_bitmap(); // Obtiene la imagen de la textura CDIV_3D_POINT get_distance(); // Obtiene la distancia del polígono al eje de rotación CDIV_3D_POINT * get_corner( int icorner ); // Obtiene el la esquina de un polígono CDIV_2D_POINT * get_texture_point( int icorner ); // Obtiene el la esquina de un polígono de la textura unsigned char is_blender(); // Obtiene si está activado el fundido M3D_POLY_3D( int ncorners, void * obj3d ); // Constructor }
Descripción:
Esta clase controla la creación y manipulación de polígonos 3D.
Constructor:
// Crea un polígono 3D de 'n' esquinas en el objeto 3D pasado M3D_POLY_3D( int n_esquinas, M3D_OBJECT_3D * objeto3d ); - Ejemplo de utilización: M3D_POLY_3D * poly3d = new M3D_POLY_3D( 4, obj3d ); - También se puede utilizar la función homónima: M3D_POLY_3D * poly3d = create_poly_3d( 4, obj3d );Métodos de la clase:
void set_render_type( int rtype )Establece el tipo de renderizado del polígono que puede ser:
POLYTYPE_PTEX: Tipo de renderizado normal.
POLYTYPE_PTEX_MASK: Tipo de renderizado con máscara, 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.
unsigned char get_render_type()Obtiene el tipo de renderizado.
void set_texture( int id_file, int id_graph, int tx_type, int tx_mode, int tx_flag )Establece la textura del polígono 3D por medio de los siguientes parámetros:
id_file: Identificador número del FPG del gráfico.
id_graph: Identificador número del gráfico.
tx_type: Tipo de textura a aplicar que pude ser:
M3D_TX_ZOOM: Tipo de textura que
se ampliara hasta completar el tamaño del polígono.
M3D_TX_TILED: Tipo de textura que se irá repitiendo sobre el polígono.
M3D_TX_ZOOM_MASK: Tipo de textura que se ampliara hasta completar el tamaño del polígono, 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: Tipo de textura que se irá repitiendo sobre el polígono, 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.
tx_mode: Modo de texturizado, según sobre que eje se va a texturizar XY, XZ, YZ.
M3D_TX_XY: Texturizar sobre el
eje XY.
M3D_TX_XZ: Texturizar
sobre el eje XZ.
M3D_TX_YZ:
Texturizar sobre el eje YZ.
tx_flags: Modo se espejado, estos pueden ser:
M3D_TX_XMIRROR: Espejado en el
eje X, si texturizamos sobre el eje YZ, Y pasaría a ser X.
M3D_TX_YMIRROR: Espejado en el eje Y, si texturizamos sobre el eje XZ, Z pasaría a ser
Y.
M3D_TX_XYMIRROR: Espejado en el eje XY.
BITMAP * get_bitmap()Obtiene el BITMAP de la textura del gráfico en el polígono.
void set_texture_point( int nesquina, int px, int py )Establece el punto de la textura del gráfico en cada esquina del polígono, veamos un ejemplo:
// En un polígono de 4 lados y una imagen de 32x32 set_texture_point( 0, 0, 0); set_texture_point( 1, 0, 32); set_texture_point( 2, 32, 32); set_texture_point( 3, 32, 0);
CDIV_2D_POINT * get_texture_point( int icorner )Obtiene los puntos de la textura (x, y) de la esquina del polígono 3D.
void set_corner( int nesquina, int px, int py, int pz )Establece las esquinas del polígono 3D.
CDIV_3D_POINT * get_corner( int icorner )Obtiene los puntos (x, y, z) de la esquina del polígono 3D.
int get_corners()Obtiene el número de esquinas del polígono 3D.
void set_distance( int dx, int dy, int dz )Establece la distancia al eje de rotación del polígono 3D.
CDIV_3D_POINT get_distance()Obtiene la distancia al eje de rotación del polígono 3D.
void set_blender_mode( int blender_type, int ialpha )Activa el modo de fundido (blender_mode) para este polígono con la intensidad "ialpha", pudiéndose definir a cada polígono un modo fundido diferente. Los modos de fundido son los siguientes:
BM_TRANS - Modo de fundido transparente BM_ADD - Modo de fundido aditivo BM_BURN - Modo de fundido chamuscado BM_COLOR - Modo de fundido de color BM_DIFFERENCE - Modo de fundido diferencial BM_DISSOLVE - Modo de fundido disolución BM_DODGE - Modo de fundido trucado BM_HUE - Modo de fundido por tono BM_INVERT - Modo de fundido inverso BM_LUMINANCE - Modo de fundido de iluminación BM_MULTIPLY - Modo de fundido por multiplicación BM_SATURATION - Modo de fundido de saturación BM_SCREEN - Modo de fundido de pantalla
unsigned char get_blender_mode()Obtiene el modo de fundido en este polígono 3D.
unsigned char get_alpha()Obtiene la intensidad del modo de fundido en este polígono 3D.
void disable_blender_mode()Desactiva el modo de fundido en este polígono 3D.
unsigned char is_blender()Comprueba si el modo fundido del polígono esta activado (0 desactivado y distinto de 0 activado).
Ejemplo de utilización de algunas funciones:
MAIN_PROGRAM_CDIV PRIVATE int fichero; BEGIN_PROGRAM // Definimos la resolución BPP set_depth(16); // Definimos el modo gráfico set_gfx(GFX_AUTODETECT_WINDOWED); // Definimos el tamaño de pantalla set_mode( 640, 480 ); write(0,0, 0,0, "Pulse 'up' o 'down' para avanzar o retroceder"); write(0,0,10,0, "Pulse 'left' o 'right' gira la cámara izquierda o derecha"); fichero = load_fpg("../help.fpg"); M3D_OBJECT_3D * obj3d = create_object_3d(); if( obj3d ) { M3D_POLY_3D * poly3d = create_poly_3d( 4, obj3d ); if( poly3d ) { poly3d->set_corner( 0, 0, 0, 0); poly3d->set_corner( 1, 32, 0, 0); poly3d->set_corner( 2, 32, 32, 0); poly3d->set_corner( 3, 0, 32, 0); poly3d->set_texture( fichero, 100, M3D_TX_ZOOM, M3D_TX_XY, 0 ); poly3d->set_render_type(POLYTYPE_PTEX_MASK); object3d = add_object_3d( obj3d ); // Establecemos el centro del objeto set_center_object_3d( object3d, 16, 16, 0 ); }else delete( obj3d ); } start_3d(0, fichero, 9, 10000, 10000, 0, this); y = -20; m3d[0].distance.z = 500; // Nos movemos en el espacio 3D LOOP{ 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
Ver: create_poly_3d() - create_object_3d() - get_poly_3d_to_object_3d() - Estructuras y Clases predefinidas