void set_render_mode( int modo_renderizado_3d )


Descripción:

Establece el modo de renderizado de las ventanas de modo 3D. CDIV dispone de dos métodos de renderizado:

M3D_SCENE
 Este método de renderizado obtiene la mejor calidad gráfica, pero peor rendimiento que M3D_ZBUFFER.
 Soporta transparencias e intersecciones de objetos 3D, este es más indicado si se tiene previsto
 que aparezcan objetos 3D con estas características.

M3D_ZBUFFER
 Este método de renderizado obtiene igual calidad gráfica si no se utilizan transparencias.
 Soporta intersecciones de objetos 3D, pero no transparencias, este es más indicado si se tiene 
 previsto que aparezcan objetos 3D con estas características.

Esta función se puede llamar tanto antes de  utilizar start_3d() como después. Por defecto el método de renderizado será: M3D_SCENE.


Ejemplo:

int objeto3d;
CPROCESS * pobjeto;

PROCESS_INIT( objeto )(int tx, int ty, int tz)
 BEGIN_INIT
  x = tx; y = ty; z = tz;
 END_INIT
BEGIN
 ctype = c_3d_object;
 
 object3d = objeto3d;
 
 size = 800;
 
 flags = 4;
 
 LOOP
  FRAME;
END

PROCESS_INIT( obj )( int tx, int ty, int tz, CDIV_3D_POINT tangle3d)
 BEGIN_INIT
  x = tx; y = ty; z = tz; angle3d = tangle3d;
 END_INIT
 
BEGIN
 ctype = c_3d_object;
 object3d = objeto3d;
 
 get_angle3d(pobjeto, &angle3d);
 
 size = 400;
 
 LOOP
 {
  advance3d(10);  
  FRAME;
 } 
END

MAIN_PROGRAM_CDIV
PRIVATE
 int fichero, modo, enter_key;
 char strinfo[100];
 
BEGIN_PROGRAM 

    set_gfx(GFX_AUTODETECT_WINDOWED);
    
    set_depth(16);
    
    //cdiv_wait_for_os = 0;
    set_fps(0,0);
    
    set_mode(800,600);
    
    // Subimos la altura de la cámara
    y = -180;
    z = -2000;
    
    modo = M3D_SCENE;
    strcpy(strinfo, "Modo: MD3_SCENE  , Transparencias [SI] Intersecciones [NO]");
    
    write(0,0,0,0, "FPS:");
    write_float(0,40,0,0, &fps );
    write(0,0,10,0, strinfo);
    write(0,0,20,0, "Pulse 'ENTER' para cambiar de modo.");
    
    fichero = load_fpg("../help.fpg");
    
    objeto3d = create_box_3d( fichero, 10 );
    
    start_3d(0, fichero, 9, 10000, 10000, 0, this);
    
    pobjeto = new objeto(0, -1000, 100);
    
    m3d[0].distance.z = 1000;
    m3d[0].distance.y = 2000;
    
    for(int i=0;i<200;i++)
     new obj( -20000+(i*400), -10000+(i*256), 500, angle3d);
     
    enter_key = 0;
        
    LOOP{
     
     if( key(_enter) && !enter_key )
     {
      if( modo == M3D_ZBUFFER )
      {
       modo = M3D_SCENE;
       strcpy(strinfo, "Modo: MD3_SCENE  , Transparencias [SI] Intersecciones [SI]");
      }else{
       modo = M3D_ZBUFFER;
       strcpy(strinfo, "Modo: MD3_ZBUFFER, Transparencias [NO] Intersecciones [SI]");
      }
      
      set_render_mode(modo);
     }
     
     enter_key = key(_enter);
      
     if( key(_space) )
      set_render_mode(M3D_SCENE);
     
     FRAME;
    }

END_PROGRAM

En el ejemplo se crea una caja 3d transparente "por medio de la función create_box_3d()" sobre la que van entrando otras cajas 3d interseccionando entre si y sobre la caja transparente. Al pulsar la tecla ENTER vemos como cambia el modo de renderizado afectando a la transparencia de la caja 3D central.


Ver: start_3d() - create_box_3d() - Estructura m3d