Subversion Repositories Games.Descent

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /*
  2.  * Portions of this file are copyright Rebirth contributors and licensed as
  3.  * described in COPYING.txt.
  4.  */
  5.  
  6. #pragma once
  7.  
  8. #include "maths.h"
  9. #include "dxxsconf.h"
  10. #include "dsx-ns.h"
  11.  
  12. namespace dcx {
  13.  
  14. struct vms_vector;
  15. class vm_distance_squared;
  16.  
  17. class vm_distance;
  18. class vm_magnitude;
  19. class vm_distance_squared;
  20. class vm_magnitude_squared;
  21. struct vms_angvec;
  22. struct vms_matrix;
  23. struct vms_quaternion;
  24.  
  25. extern const vms_matrix vmd_identity_matrix;
  26.  
  27. #define IDENTITY_MATRIX { {f1_0,0,0}, {0,f1_0,0}, {0,0,f1_0} }
  28.  
  29. vms_vector &vm_vec_add (vms_vector &dest, const vms_vector &src0, const vms_vector &src1);
  30.  
  31. vms_vector &_vm_vec_sub(vms_vector &dest, const vms_vector &src0, const vms_vector &src1);
  32. void vm_vec_add2 (vms_vector &dest, const vms_vector &src);
  33. void vm_vec_sub2 (vms_vector &dest, const vms_vector &src);
  34. void vm_vec_avg (vms_vector &dest, const vms_vector &src0, const vms_vector &src1);
  35. vms_vector &vm_vec_scale (vms_vector &dest, fix s);
  36. void vm_vec_divide(vms_vector &dest, const vms_vector &src, fix d);
  37.  
  38. #define vm_vec_copy_scale(A,B,...)      vm_vec_copy_scale(A, ## __VA_ARGS__, B)
  39. vms_vector &vm_vec_copy_scale (vms_vector &dest, const vms_vector &src, fix s);
  40. void vm_vec_scale_add (vms_vector &dest, const vms_vector &src1, const vms_vector &src2, fix k);
  41. void vm_vec_scale_add2 (vms_vector &dest, const vms_vector &src, fix k);
  42. void vm_vec_scale2 (vms_vector &dest, fix n, fix d);
  43.  
  44. __attribute_warn_unused_result
  45. vm_magnitude_squared vm_vec_mag2(const vms_vector &v);
  46. __attribute_warn_unused_result
  47. vm_magnitude vm_vec_mag(const vms_vector &v);
  48.  
  49. __attribute_warn_unused_result
  50. vm_distance vm_vec_dist(const vms_vector &v0, const vms_vector &v1);
  51. __attribute_warn_unused_result
  52. vm_distance_squared vm_vec_dist2(const vms_vector &v0, const vms_vector &v1);
  53.  
  54. __attribute_warn_unused_result
  55. vm_magnitude vm_vec_mag_quick(const vms_vector &v);
  56.  
  57. __attribute_warn_unused_result
  58. vm_distance vm_vec_dist_quick(const vms_vector &v0, const vms_vector &v1);
  59.  
  60. __attribute_warn_unused_result
  61. vm_magnitude vm_vec_copy_normalize(vms_vector &dest, const vms_vector &src);
  62.  
  63. vm_magnitude vm_vec_normalize(vms_vector &v);
  64.  
  65. vm_magnitude vm_vec_copy_normalize_quick(vms_vector &dest, const vms_vector &src);
  66.  
  67. vm_magnitude vm_vec_normalize_quick(vms_vector &v);
  68. vm_magnitude vm_vec_normalized_dir (vms_vector &dest, const vms_vector &end, const vms_vector &start);
  69. vm_magnitude vm_vec_normalized_dir_quick (vms_vector &dest, const vms_vector &end, const vms_vector &start);
  70.  
  71. __attribute_warn_unused_result
  72. fix vm_vec_dot (const vms_vector &v0, const vms_vector &v1);
  73.  
  74. void vm_vec_cross (vms_vector &dest, const vms_vector &src0, const vms_vector &src1);
  75.  
  76. void vm_vec_normal (vms_vector &dest, const vms_vector &p0, const vms_vector &p1, const vms_vector &p2);
  77.  
  78. void vm_vec_perp (vms_vector &dest, const vms_vector &p0, const vms_vector &p1, const vms_vector &p2);
  79. fixang vm_vec_delta_ang (const vms_vector &v0, const vms_vector &v1, const vms_vector &fvec) __attribute_warn_unused_result;
  80. fixang vm_vec_delta_ang_norm (const vms_vector &v0, const vms_vector &v1, const vms_vector &fvec) __attribute_warn_unused_result;
  81.  
  82. void vm_angles_2_matrix (vms_matrix &m, const vms_angvec &a);
  83.  
  84. #if DXX_USE_EDITOR
  85. void vm_vec_ang_2_matrix (vms_matrix &m, const vms_vector &v, fixang a);
  86. #endif
  87.  
  88. void vm_vector_2_matrix (vms_matrix &m, const vms_vector &fvec, const vms_vector *uvec, const vms_vector *rvec);
  89. void vm_vec_rotate (vms_vector &dest, const vms_vector &src, const vms_matrix &m);
  90. void _vm_matrix_x_matrix (vms_matrix &dest, const vms_matrix &src0, const vms_matrix &src1);
  91. void vm_extract_angles_matrix (vms_angvec &a, const vms_matrix &m);
  92. void vm_extract_angles_vector (vms_angvec &a, const vms_vector &v);
  93. fix vm_dist_to_plane (const vms_vector &checkp, const vms_vector &norm, const vms_vector &planep) __attribute_warn_unused_result;
  94. void vms_quaternion_from_matrix(vms_quaternion &q, const vms_matrix &m);
  95. void vms_matrix_from_quaternion(vms_matrix &m, const vms_quaternion &q);
  96.  
  97. }
  98.