void fxadvance3d( CPROCESS * identificador, CDIV_3D_POINT ángulo3d, int distancia )
Descripción:
Avanza el proceso en el ángulo especificado en la función tantos puntos como indique la expresión (distancia) pasada como parámetro.
Para avanzar en el mismo ángulo del proceso se puede utilizar la función advance3d().
La distancia puede ser también un número negativo, con lo cual el gráfico del proceso avanzará (sus coordenadas x, y, z) en la dirección contraria a su ángulo.
MAIN_PROGRAM_CDIV PRIVATE int fichero1; CDIV_3D_POINT angulo; BEGIN_PROGRAM set_gfx(GFX_AUTODETECT_WINDOWED); set_mode(m320x200); fichero1=load_fpg("../help.fpg"); y = -5; // Subimos la cámara 5 píxeles start_3d(0, fichero1, 100, 512, 512, 0, this); write(0, 0, 0, 0, "Pulsa las flechas:"); write(0, 0, 8, 0, " Arriba - Ir hacia delante"); write(0, 0, 16, 0, " Abajo - Ir hacia atras"); write(0, 0, 24, 0, " Derecha - Rotar hacia la derecha"); write(0, 0, 32, 0, " Izquierda - Rotar hacia la izquierda"); angulo.x = angulo.y = angulo.z = 0; LOOP{ if( key(_right) ) angulo.y += 5000; if( key(_left) ) angulo.y -= 5000; angle3d.y = angulo.y; if( key(_up) ) fxadvance3d(this, angulo, 5); if( key(_down) ) fxadvance3d(this, angulo, -5); FRAME; } END_PROGRAM
Este ejemplo vemos como desplazarse por un espacio 3D por medio de los cursores de posición. Avanzamos según el ángulo, en la superficie por medio de la función fadvance3d().
Esta función equivale siempre a las dos siguientes sentencias:
x+=get_distx3d(angle3d, distancia); y+=get_disty3d(angle3d, distancia); z+=get_distz3d(angle3d, distancia);Es decir, esta función únicamente modifica las coordenadas del proceso. Cabe la posibilidad de utilizar las dos sentencias anteriores cuando se quiera que el proceso avance en un ángulo diferente al que indica su variable angle3d; esto resultará útil cuando se quiera que el gráfico del proceso avance en una dirección sin rotarse.
Por ejemplo, para conseguir que un proceso avance 8 puntos en una dirección (que se podría tener en una variable privada como angle2) pero rotado hacia otra dirección, (la indicada en angle3d), se utilizarían las sentencias:
x+=get_distx3d(angle2, 8); y+=get_disty3d(angle2, 8); z+=get_distz3d(angle2, 8);Ver: advance3d() - Uso de ángulos en el modo 3D - get_distx3d() - get_disty3d() - get_distz3d()