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