void get_angle3d( CPROCESS * id, CDIV_3D_POINT * angulo3d )


Descripción:

Devuelve el ángulo 3d desde nuestro proceso hasta el indicado por el identificador cuyo código identificador se le pasa como parámetro.

Se recuerda que el ángulo se especifica en milésimas de grado. La función devuelve siempre en todos sus ángulos un valor entre -180000 y 180000 (un ángulo entre -180 y 180 grados).

Ver formas de obtener el código identificador, para más información.


Ejemplo de utilización de get_angle3d():
int objeto3d;
CPROCESS * pobjeto;

PROCESS_INIT( objeto )(int tx)
 BEGIN_INIT
  x = tx;
 END_INIT
BEGIN
 ctype = c_3d_object;
 
 object3d = objeto3d;
 
 size = 100;
 
 z = 100;
 y = -1000;
 
 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);
 
 LOOP
 {
  
  advance3d(10);
  
  if(get_dist3d(father) > 3000) break;
  FRAME;
 } 
END

MAIN_PROGRAM_CDIV
PRIVATE
 int fichero, enter_key;
 
BEGIN_PROGRAM 

    // Definimos el modo gráfico
    set_gfx(GFX_AUTODETECT_WINDOWED);
    
    set_depth(16);
    
    set_fps(60,0);
    
    // Definimos la resolución
    set_mode(m640x480);
    
    // Subimos la altura de la cámara
    x = 500;
    y = -180;
    z = -1000;
    
    write(0,0,0,0, "FPS:");
    write_float(0,40,0,0, &fps );
    write(0,0,10,0, "Pulse 'up' o 'down' para avanzar o retroceder");
    write(0,0,20,0, "Pulse 'left' o 'right' gira la camara izquierda o derecha");
    write(0,0,30,0, "Pulse 'a' o 's' inclinar la camara arriba o abajo");
    write(0,0,40,0, "Pulse 'q' o 'w' girar la camara horizontalmente");
    write(0,0,50,0, "Pulse 'enter' para lanzar un objeto");
    
    fichero = load_fpg("../help.fpg");
    
    objeto3d = create_box_3d( fichero, 10 );
    
    object3d = objeto3d;
    
    start_3d(0, fichero, 9, 10000, 10000, 0, this);
    
    pobjeto = new objeto(0);
    
    m3d[0].distance.z = 1000;
    m3d[0].distance.y = 200;
    
    enter_key = 0;
        
    LOOP{
     if( key(_a) )
      angle3d.x += 1000;
      
     if( key(_s) )
      angle3d.x -= 1000;
      
     if( key(_q) )
      angle3d.z += 1000;
      
     if( key(_w) )
      angle3d.z -= 1000;
     
     if( key(_left) )
      angle3d.y += 5000;
      
     if( key(_right))
      angle3d.y -= 5000;
      
     if( key(_up))
      advance3d(10);
      
     if( key(_down))
      advance3d(-10);
      
     if( key(_enter) && !enter_key )
      new obj( x, y, z, angle3d);
     
     enter_key = key(_enter);
     
     FRAME;
    }

END_PROGRAM


En el ejemplo, después de poner los mensajes necesarios, vemos como un proceso avanza hacia otro por medio del ángulo obtenido, calculando con la función get_angle3d() el ángulo entre dichos objetos. Cada vez que se pulse la barra enter se repetirá el proceso.

La función fget_angle3d() se utiliza para obtener el ángulo entre dos puntos, en lugar de entre dos procesos. Si el código identificador del proceso se tiene, por ejemplo, en una variable denominada id2, entonces la llamada a la función:

 get_angle3d(id2, &angulo3d)

Sería equivalente a:

 fget_angle3d( punto3d0, punto3d1, &angulo3d)

Obtener el ángulo desde las coordenadas (x, y, z) del proceso actual, hasta las coordenadas (x, y, z) del proceso cuyo código identificador es id2.

La función get_dist3d() se utiliza para obtener la distancia hasta otro proceso, en lugar del ángulo.


Ver: Uso de ángulos en el modo 3D - fget_angle3d() - get_dist3d()