Subversion Repositories Games.Descent

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 pmbaty 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
}