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