-
Notifications
You must be signed in to change notification settings - Fork 2
/
vec_math.sh
140 lines (107 loc) · 2.42 KB
/
vec_math.sh
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
vec3() {
eval "$1=($2 $3 $4)"
}
vec3_add() {
local -a a=("${!2}")
local -a b=("${!3}")
local ret
add ${a[0]} ${b[0]}; local x=$ret
add ${a[1]} ${b[1]}; local y=$ret
add ${a[2]} ${b[2]}; local z=$ret
vec3 $1 $x $y $z
}
vec3_sub() {
local -a a=("${!2}")
local -a b=("${!3}")
local ret
sub ${a[0]} ${b[0]}; local x=$ret
sub ${a[1]} ${b[1]}; local y=$ret
sub ${a[2]} ${b[2]}; local z=$ret
vec3 $1 $x $y $z
}
vec3_mul() {
local -a a=("${!2}")
local -a b=("${!3}")
local ret
mul ${a[0]} ${b[0]}; local x=$ret
mul ${a[1]} ${b[1]}; local y=$ret
mul ${a[2]} ${b[2]}; local z=$ret
vec3 $1 $x $y $z
}
vec3_mulf() {
local -a a=("${!2}")
local f=$3
local ret
mul ${a[0]} $f; local x=$ret
mul ${a[1]} $f; local y=$ret
mul ${a[2]} $f; local z=$ret
vec3 $1 $x $y $z
}
vec3_divf() {
local -a a=("${!2}")
local f=$3
local ret
div ${a[0]} $f; local x=$ret
div ${a[1]} $f; local y=$ret
div ${a[2]} $f; local z=$ret
vec3 "$1" "$x" "$y" "$z"
}
vec3_dot() {
local -a a=("${!1}")
local -a b=("${!2}")
mul ${a[0]} ${b[0]}; local x=$ret
mul ${a[1]} ${b[1]}; local y=$ret
mul ${a[2]} ${b[2]}; local z=$ret
((ret = x + y + z))
}
vec3_truncate() {
local -a a=("${!2}")
local ret
truncate ${a[0]}; local x=$ret
truncate ${a[1]}; local y=$ret
truncate ${a[2]}; local z=$ret
vec3 $1 $x $y $z
}
vec3_sqrt() {
local -a a=("${!2}")
local ret
sqrt ${a[0]}; local x=$ret
sqrt ${a[1]}; local y=$ret
sqrt ${a[2]}; local z=$ret
vec3 $1 $x $y $z
}
vec3_normalize() {
local -a vec=("${!2}")
local ret
vec3_dot 'vec[@]' 'vec[@]'; local vec_2=$ret
inv_sqrt $vec_2; local inv_length=$ret
vec3_mulf $1 vec[@] $inv_length
}
vec3_to_fp() {
local ret
to_fp $2; local x=$ret
to_fp $3; local y=$ret
to_fp $4; local z=$ret
vec3 $1 $x $y $z
}
vec3_clamp_0_1() {
local -a a=("${!2}")
local ret
clamp_0_1 ${a[0]}; local x=$ret
clamp_0_1 ${a[1]}; local y=$ret
clamp_0_1 ${a[2]}; local z=$ret
vec3 $1 $x $y $z
}
vec3_test() {
local -a x=(2 -2 3)
local -a y=(-2 2 -3)
# vec3_clamp_0_1 res x[@]
# echo ${res[@]}
# vec3_add res x[@] y[@]
# echo ${res[@]}
local s=$(( scale * scale ))
vec3_mulf res_1 x[@] s
vec3_mulf res_2 y[@] s
vec3_mul res res_1[@] res_2[@]
echo ${res[@]}
}