/
vec3.h
54 lines (51 loc) · 1.53 KB
/
vec3.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#ifndef VEC3H
#define VEC3H
#include "sqrtf.h"
#ifndef CRAYFLT
#define CRAYFLT float
#endif
typedef struct {
CRAYFLT x;
CRAYFLT y;
CRAYFLT z;
} vec3;
#define VEC3_SET(V, X, Y, Z) (V).x = (X); (V).y = (Y); (V).z = (Z);
#define VEC3_ADD(V1, V2, OUT) \
(OUT).x = (V1).x + (V2).x;\
(OUT).y = (V1).y + (V2).y;\
(OUT).z = (V1).z + (V2).z;
#define VEC3_SUB(V2, V1, OUT) \
(OUT).x = (V2).x - (V1).x;\
(OUT).y = (V2).y - (V1).y;\
(OUT).z = (V2).z - (V1).z;
#define VEC3_DIVS(V, S, OUT)\
(OUT).x = (V).x / (S);\
(OUT).y = (V).y / (S);\
(OUT).z = (V).z / (S);
#define VEC3_MULS(V, S, OUT) \
(OUT).x = (V).x * (S);\
(OUT).y = (V).y * (S);\
(OUT).z = (V).z * (S);
#define VEC3_ADDS(V, S, OUT) \
(OUT).x = (V).x + S;\
(OUT).y = (V).y + S;\
(OUT).z = (V).z + S;
#define VEC3_LENGTH(V) (cray_sqrtf((V).x*(V).x + (V).y*(V).y + (V).z*(V).z))
#define VEC3_SQUARED_LENGTH(V) ((V).x*(V).x + (V).y*(V).y + (V).z*(V).z)
#define VEC3_UNIT_VECTOR(V, TMP, OUT)\
TMP=VEC3_LENGTH(V);\
VEC3_DIVS(V, TMP, OUT);
#define VEC3_DOT(A, B) ((A).x*(B).x + (A).y*(B).y + (A).z*(B).z)
#define VEC3_SQRT(V, OUT)\
(OUT).x = cray_sqrtf((V).x);\
(OUT).y = cray_sqrtf((V).y);\
(OUT).z = cray_sqrtf((V).z);
#define VEC3_MUL(V1, V2, OUT)\
(OUT).x = (V1).x * (V2).x;\
(OUT).y = (V1).y * (V2).y;\
(OUT).z = (V1).z * (V2).z;
#define VEC3_CROSS(V1, V2, OUT)\
(OUT).x = (V1).y*(V2).z - (V1).z*(V2).y;\
(OUT).y = -((V1).x*(V2).z - (V1).z*(V2).x);\
(OUT).z = (V1).x*(V2).y - (V1).y*(V2).x;
#endif