focal (3) al_transform_coordinates_3d_projective.3alleg5.gz

Provided by: allegro5-doc_5.2.6.0-1_all bug

NAME

       al_transform_coordinates_3d_projective - Allegro 5 API

SYNOPSIS

              #include <allegro5/allegro.h>

              void al_transform_coordinates_3d_projective(const ALLEGRO_TRANSFORM *trans,
                 float *x, float *y, float *z)

DESCRIPTION

       Transform    x,    y,    z    as    homogeneous    coordinates.     This    is    the   same   as   using
       al_transform_coordinates_4d(3alleg5) with the w coordinate set to  1,  then  dividing  x,  y,  z  by  the
       resulting  w.   This  will provide the same normalized coordinates Allegro will draw to when a projective
       transform is in effect as  set  with  al_use_projection_transform(3alleg5).   To  get  the  actual  pixel
       coordinates  from  those translate and scale like so (w and h would be the pixel dimensions of the target
       bitmap):

              x = w / 2 + x * w / 2
              y = h / 2 - y * h / 2

       Parameters:

       • trans - Transformation to use

       • x, y, z - Pointers to the coordinates

       Example:

              ALLEGRO_TRANSFORM t2;
              al_copy_transform(&t2, al_get_current_transform());
              al_compose_transform(&t2, al_get_current_projection_transform());

              ALLEGRO_TRANSFORM t3;
              al_identity_transform(&t3);
              al_scale_transform(&t3, 0.5, -0.5);
              al_translate_transform(&t3, 0.5, 0.5);
              al_scale_transform(&t3, al_get_bitmap_width(al_get_target_bitmap()),
                                 al_get_bitmap_height(al_get_target_bitmap()));

              al_transform_coordinates_3d_projective(&t2, &x, &y, &z);
              // x, y now contain normalized coordinates
              al_transform_coordinates(&t3, &x, &y);
              // x, y now contain pixel coordinates

       Since 5.2.4

SEE ALSO

       al_use_transform(3alleg5),    al_transform_coordinates(3alleg5),    al_transform_coordinates_3d(3alleg5),
       al_use_projection_transform(3alleg5)