Guest User

Untitled

a guest
May 25th, 2018
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.10 KB | None | 0 0
  1. /* Function: al_translate_transform_3d
  2.  */
  3. void al_translate_transform_3d(ALLEGRO_TRANSFORM *trans, float x, float y, float z)
  4. {
  5.    ASSERT(trans);
  6.    
  7.    trans->m[3][0] += x;
  8.    trans->m[3][1] += y;
  9.    trans->m[3][2] += z;
  10. }
  11.  
  12. /* Function: al_scale_transform_3d
  13.  */
  14. void al_scale_transform_3d(ALLEGRO_TRANSFORM *trans, float sx, float sy, float sz)
  15. {
  16.    int ii;
  17.    ASSERT(trans);
  18.    
  19.    for(ii = 0; ii < 3; ii++)
  20.    {
  21.       trans->m[ii][0] *= sx;
  22.       trans->m[ii][1] *= sy;
  23.       trans->m[ii][2] *= sz;
  24.    }
  25. }
  26.  
  27. /* Function: al_rotate_transform_x
  28.  */
  29. void al_rotate_transform_x(ALLEGRO_TRANSFORM *trans, float theta)
  30. {
  31.    float c = cosf(theta);
  32.    float s = sinf(theta);
  33.    int ii;
  34.    ASSERT(trans);
  35.    
  36.    for(ii = 0; ii < 4; ii++)
  37.    {
  38.       float t = trans->m[ii][1];
  39.       trans->m[ii][1] = t * c - trans->m[ii][2] * s;
  40.       trans->m[ii][2] = t * s + trans->m[ii][2] * c;
  41.    }
  42. }
  43.  
  44. /* Function: al_rotate_transform_y
  45.  */
  46. void al_rotate_transform_y(ALLEGRO_TRANSFORM *trans, float theta)
  47. {
  48.    float c = cosf(theta);
  49.    float s = sinf(theta);
  50.    int ii;
  51.    ASSERT(trans);
  52.    
  53.    for(ii = 0; ii < 4; ii++)
  54.    {
  55.       float t = trans->m[ii][0];
  56.       trans->m[ii][0] = trans->m[ii][2] * s + t * c;
  57.       trans->m[ii][2] = trans->m[ii][2] * c - t * s;
  58.    }
  59. }
  60.  
  61. /* Function: al_rotate_transform_z
  62.  */
  63. void al_rotate_transform_z(ALLEGRO_TRANSFORM *trans, float theta)
  64. {
  65.    float c = cosf(theta);
  66.    float s = sinf(theta);
  67.    int ii;
  68.    ASSERT(trans);
  69.    
  70.    for(ii = 0; ii < 4; ii++)
  71.    {
  72.       float t = trans->m[ii][0];
  73.       trans->m[ii][0] = t * c - trans->m[ii][1] * s;
  74.       trans->m[ii][1] = t * s + trans->m[ii][1] * c;
  75.    }
  76. }
  77.  
  78. /* Function: al_rotate_transform_axis
  79.  */
  80. void al_rotate_transform_axis(ALLEGRO_TRANSFORM *trans, float x, float y, float z, float theta)
  81. {
  82.    /*float c = cosf(theta);
  83.    float s = sinf(theta);
  84.    ASSERT(trans);
  85.    
  86.    for(int ii = 0; ii < 4; ii++)
  87.    {
  88.       float t = trans->m[ii][0];
  89.       trans->m[ii][0] = t * c - trans->m[ii][1] * s;
  90.       trans->m[ii][1] = t * s + trans->m[ii][1] * c;
  91.    }*/
  92. }
  93.  
  94. /* Function: al_transform_coordinates
  95.  */
  96. void al_transform_coordinates_3d(const ALLEGRO_TRANSFORM *trans, float *x, float *y, float* z)
  97. {
  98.    float tx, ty;
  99.    ASSERT(trans);
  100.    ASSERT(x);
  101.    ASSERT(y);
  102.    ASSERT(z);
  103.  
  104.    tx = *x;
  105.    ty = *y;
  106.    
  107.    *x = tx * trans->m[0][0] + ty * trans->m[1][0] + *z * trans->m[2][0] + trans->m[3][0];
  108.    *y = tx * trans->m[0][1] + ty * trans->m[1][1] + *z * trans->m[2][1] + trans->m[3][1];
  109.    *z = tx * trans->m[0][2] + ty * trans->m[1][2] + *z * trans->m[2][2] + trans->m[3][2];
  110. }
  111.  
  112. /* Function: al_transform_transform_3d
  113.  */
  114. void al_transform_transform_3d(const ALLEGRO_TRANSFORM *trans, ALLEGRO_TRANSFORM *trans2)
  115. {
  116.    ASSERT(trans);
  117.  
  118.    al_transform_coordinates_3d(trans, trans->m[0], trans->m[0] + 1, trans->m[0] + 2);
  119.    al_transform_coordinates_3d(trans, trans->m[1], trans->m[1] + 1, trans->m[1] + 2);
  120.    al_transform_coordinates_3d(trans, trans->m[2], trans->m[2] + 1, trans->m[2] + 2);
  121.    al_transform_coordinates_3d(trans, trans->m[3], trans->m[3] + 1, trans->m[3] + 2);
  122. }
Add Comment
Please, Sign In to add comment