-
Notifications
You must be signed in to change notification settings - Fork 0
/
vec3.fs
129 lines (94 loc) · 1.82 KB
/
vec3.fs
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
[undefined] vec3.fs [if]
vocabulary vec3.fs also vec3.fs definitions
require fp.fs
also fp.fs
0 \ vector3
dup constant v.x 1 cells +
dup constant v.y 1 cells +
dup constant v.z 1 cells +
constant vector3
: v.x@ v.x + @ ;
: v.y@ v.y + @ ;
: v.z@ v.z + @ ;
create v0 vector3 allot
create v1 vector3 allot
create v2 vector3 allot
: v! ( x y z addr -- ) dup >r v.z + ! r@ v.y + ! r> ! ;
: v@ ( v -- x y z ) dup @ swap dup v.y@ swap v.z@ ;
: vadd ( v0 v1 -- v2 )
v1 v! v0 v!
v0 v.x@ v1 v.x@ +
v0 v.y@ v1 v.y@ +
v0 v.z@ v1 v.z@ +
;
: vsub ( v0 v1 -- v2 )
v1 v! v0 v!
v0 v.x@ v1 v.x@ -
v0 v.y@ v1 v.y@ -
v0 v.z@ v1 v.z@ -
;
: vmul ( v0 v1 -- v2 )
v1 v! v0 v!
v0 v.x@ v1 v.x@ fp*
v0 v.y@ v1 v.y@ fp*
v0 v.z@ v1 v.z@ fp*
;
: vdiv ( v0 v1 -- v2 )
v1 v! v0 v!
v0 v.x@ v1 v.x@ fp/
v0 v.y@ v1 v.y@ fp/
v0 v.z@ v1 v.z@ fp/
;
\ https://www.fpgarelated.com/showarticle/1347.php
\ TODO: cheat with FPU, fix this!
: vlength ( v0 -- n )
v0 v!
v0 v.x@ fp>f fdup f*
v0 v.y@ fp>f fdup f*
v0 v.z@ fp>f fdup f* f+ f+ fsqrt f>fp
\ v0 v.x@ dup fp*
\ v0 v.y@ dup fp*
\ v0 v.z@ dup fp* + +
;
: vdot ( v0 v1 -- n )
v1 v! v0 v!
v0 v.x@ v1 v.x@ fp*
v0 v.y@ v1 v.y@ fp*
v0 v.z@ v1 v.z@ fp*
+ +
;
: vcross ( v0 v1 -- v2 )
v1 v! v0 v!
v0 v.y@ v1 v.z@ fp*
v0 v.z@ v1 v.y@ fp* -
v0 v.z@ v1 v.x@ fp*
v0 v.x@ v1 v.z@ fp* -
v0 v.x@ v1 v.y@ fp*
v0 v.y@ v1 v.x@ fp* -
;
: vnormal ( v0 v1 v2 -- v3 )
v2 v! v1 v! v0 v!
v1 v@ v0 v@ vsub
v2 v@ v0 v@ vsub
vcross
;
: vnormalize ( v0 -- v1 )
v0 v!
v0 v@
v0 v@ vlength dup dup
vdiv
;
\ 1 i>fp 2 i>fp 3 i>fp
\ 1 i>fp 5 i>fp 7 i>fp vdot fp>i .s
\ \ 1 i>fp 2 i>fp 3 i>fp .s vnormalize .s
\ bye
\ 0e 16384e f/
\ 0e 16384e f/
\ -16384e 16384e f/
\ 54e 16384e f/
\ 4879e 16384e f/
\ -16384e 16384e f/
\ f.s
\ bye
previous definitions
[then]