KiCad PCB EDA Suite
Loading...
Searching...
No Matches
bbox_3d_ray.cpp
Go to the documentation of this file.
1
/*
2
* This program source code file is part of KiCad, a free EDA CAD application.
3
*
4
* Copyright (C) 2015-2016 Mario Luzeiro <
[email protected]
>
5
* Copyright The KiCad Developers, see AUTHORS.txt for contributors.
6
*
7
* This program is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU General Public License
9
* as published by the Free Software Foundation; either version 2
10
* of the License, or (at your option) any later version.
11
*
12
* This program is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
* GNU General Public License for more details.
16
*
17
* You should have received a copy of the GNU General Public License
18
* along with this program. If not, see <https://www.gnu.org/licenses/>.
19
*/
20
25
26
#include "
bbox_3d.h
"
27
#include "
../ray.h
"
28
#include <wx/debug.h>
29
30
// This BBOX Ray intersection test have the following credits:
31
32
// "This source code accompanies the Journal of Graphics Tools paper:
33
//
34
// "Fast Ray / Axis-Aligned Bounding Box Overlap Tests using Ray Slopes"
35
// by Martin Eisemann, Thorsten Grosch, Stefan Müller and Marcus Magnor
36
// Computer Graphics Lab, TU Braunschweig, Germany and
37
// University of Koblenz-Landau, Germany
38
//
39
// This source code is public domain, but please mention us if you use it."
40
41
42
bool
BBOX_3D::Intersect
(
const
RAY
& aRay,
float
* t )
const
43
{
44
switch
( aRay.
m_Classification
)
45
{
46
case
RAY_CLASSIFICATION::MMM
:
47
{
48
if
( ( aRay.
m_Origin
.x <
m_min
.x ) || ( aRay.
m_Origin
.y <
m_min
.y )
49
|| ( aRay.
m_Origin
.z <
m_min
.z )
50
|| ( aRay.
jbyi
*
m_min
.x -
m_max
.y + aRay.
c_xy
> 0 )
51
|| ( aRay.
ibyj
*
m_min
.y -
m_max
.x + aRay.
c_yx
> 0 )
52
|| ( aRay.
jbyk
*
m_min
.z -
m_max
.y + aRay.
c_zy
> 0 )
53
|| ( aRay.
kbyj
*
m_min
.y -
m_max
.z + aRay.
c_yz
> 0 )
54
|| ( aRay.
kbyi
*
m_min
.x -
m_max
.z + aRay.
c_xz
> 0 )
55
|| ( aRay.
ibyk
*
m_min
.z -
m_max
.x + aRay.
c_zx
> 0 ) )
56
return
false
;
57
58
// compute the intersection distance
59
60
*t = (
m_max
.x - aRay.
m_Origin
.x ) * aRay.
m_InvDir
.x;
61
62
float
t1 = (
m_max
.y - aRay.
m_Origin
.y ) * aRay.
m_InvDir
.y;
63
64
if
( t1 > *t )
65
*t = t1;
66
67
float
t2 = (
m_max
.z - aRay.
m_Origin
.z ) * aRay.
m_InvDir
.z;
68
69
if
( t2 > *t )
70
*t = t2;
71
72
return
true
;
73
}
74
75
case
RAY_CLASSIFICATION::MMP
:
76
{
77
if
( ( aRay.
m_Origin
.x <
m_min
.x ) || ( aRay.
m_Origin
.y <
m_min
.y )
78
|| ( aRay.
m_Origin
.z >
m_max
.z )
79
|| ( aRay.
jbyi
*
m_min
.x -
m_max
.y + aRay.
c_xy
> 0 )
80
|| ( aRay.
ibyj
*
m_min
.y -
m_max
.x + aRay.
c_yx
> 0 )
81
|| ( aRay.
jbyk
*
m_max
.z -
m_max
.y + aRay.
c_zy
> 0 )
82
|| ( aRay.
kbyj
*
m_min
.y -
m_min
.z + aRay.
c_yz
< 0 )
83
|| ( aRay.
kbyi
*
m_min
.x -
m_min
.z + aRay.
c_xz
< 0 )
84
|| ( aRay.
ibyk
*
m_max
.z -
m_max
.x + aRay.
c_zx
> 0 ) )
85
return
false
;
86
87
*t = (
m_max
.x - aRay.
m_Origin
.x ) * aRay.
m_InvDir
.x;
88
89
float
t1 = (
m_max
.y - aRay.
m_Origin
.y ) * aRay.
m_InvDir
.y;
90
91
if
( t1 > *t )
92
*t = t1;
93
94
float
t2 = (
m_min
.z - aRay.
m_Origin
.z ) * aRay.
m_InvDir
.z;
95
96
if
( t2 > *t )
97
*t = t2;
98
99
return
true
;
100
}
101
102
case
RAY_CLASSIFICATION::MPM
:
103
{
104
if
( ( aRay.
m_Origin
.x <
m_min
.x ) || ( aRay.
m_Origin
.y >
m_max
.y )
105
|| ( aRay.
m_Origin
.z <
m_min
.z )
106
|| ( aRay.
jbyi
*
m_min
.x -
m_min
.y + aRay.
c_xy
< 0 )
107
|| ( aRay.
ibyj
*
m_max
.y -
m_max
.x + aRay.
c_yx
> 0 )
108
|| ( aRay.
jbyk
*
m_min
.z -
m_min
.y + aRay.
c_zy
< 0 )
109
|| ( aRay.
kbyj
*
m_max
.y -
m_max
.z + aRay.
c_yz
> 0 )
110
|| ( aRay.
kbyi
*
m_min
.x -
m_max
.z + aRay.
c_xz
> 0 )
111
|| ( aRay.
ibyk
*
m_min
.z -
m_max
.x + aRay.
c_zx
> 0 ) )
112
return
false
;
113
114
*t = (
m_max
.x - aRay.
m_Origin
.x ) * aRay.
m_InvDir
.x;
115
116
float
t1 = (
m_min
.y - aRay.
m_Origin
.y ) * aRay.
m_InvDir
.y;
117
118
if
( t1 > *t )
119
*t = t1;
120
121
float
t2 = (
m_max
.z - aRay.
m_Origin
.z ) * aRay.
m_InvDir
.z;
122
123
if
( t2 > *t )
124
*t = t2;
125
126
return
true
;
127
}
128
129
case
RAY_CLASSIFICATION::MPP
:
130
{
131
if
( ( aRay.
m_Origin
.x <
m_min
.x ) || ( aRay.
m_Origin
.y >
m_max
.y )
132
|| ( aRay.
m_Origin
.z >
m_max
.z )
133
|| ( aRay.
jbyi
*
m_min
.x -
m_min
.y + aRay.
c_xy
< 0 )
134
|| ( aRay.
ibyj
*
m_max
.y -
m_max
.x + aRay.
c_yx
> 0 )
135
|| ( aRay.
jbyk
*
m_max
.z -
m_min
.y + aRay.
c_zy
< 0 )
136
|| ( aRay.
kbyj
*
m_max
.y -
m_min
.z + aRay.
c_yz
< 0 )
137
|| ( aRay.
kbyi
*
m_min
.x -
m_min
.z + aRay.
c_xz
< 0 )
138
|| ( aRay.
ibyk
*
m_max
.z -
m_max
.x + aRay.
c_zx
> 0 ) )
139
return
false
;
140
141
*t = (
m_max
.x - aRay.
m_Origin
.x ) * aRay.
m_InvDir
.x;
142
143
float
t1 = (
m_min
.y - aRay.
m_Origin
.y ) * aRay.
m_InvDir
.y;
144
145
if
( t1 > *t )
146
*t = t1;
147
148
float
t2 = (
m_min
.z - aRay.
m_Origin
.z ) * aRay.
m_InvDir
.z;
149
150
if
( t2 > *t )
151
*t = t2;
152
153
return
true
;
154
}
155
156
case
RAY_CLASSIFICATION::PMM
:
157
{
158
if
( ( aRay.
m_Origin
.x >
m_max
.x ) || ( aRay.
m_Origin
.y <
m_min
.y )
159
|| ( aRay.
m_Origin
.z <
m_min
.z )
160
|| ( aRay.
jbyi
*
m_max
.x -
m_max
.y + aRay.
c_xy
> 0 )
161
|| ( aRay.
ibyj
*
m_min
.y -
m_min
.x + aRay.
c_yx
< 0 )
162
|| ( aRay.
jbyk
*
m_min
.z -
m_max
.y + aRay.
c_zy
> 0 )
163
|| ( aRay.
kbyj
*
m_min
.y -
m_max
.z + aRay.
c_yz
> 0 )
164
|| ( aRay.
kbyi
*
m_max
.x -
m_max
.z + aRay.
c_xz
> 0 )
165
|| ( aRay.
ibyk
*
m_min
.z -
m_min
.x + aRay.
c_zx
< 0 ) )
166
return
false
;
167
168
*t = (
m_min
.x - aRay.
m_Origin
.x ) * aRay.
m_InvDir
.x;
169
170
float
t1 = (
m_max
.y - aRay.
m_Origin
.y ) * aRay.
m_InvDir
.y;
171
172
if
( t1 > *t )
173
*t = t1;
174
175
float
t2 = (
m_max
.z - aRay.
m_Origin
.z ) * aRay.
m_InvDir
.z;
176
177
if
( t2 > *t )
178
*t = t2;
179
180
return
true
;
181
}
182
183
case
RAY_CLASSIFICATION::PMP
:
184
{
185
if
( ( aRay.
m_Origin
.x >
m_max
.x ) || ( aRay.
m_Origin
.y <
m_min
.y )
186
|| ( aRay.
m_Origin
.z >
m_max
.z )
187
|| ( aRay.
jbyi
*
m_max
.x -
m_max
.y + aRay.
c_xy
> 0 )
188
|| ( aRay.
ibyj
*
m_min
.y -
m_min
.x + aRay.
c_yx
< 0 )
189
|| ( aRay.
jbyk
*
m_max
.z -
m_max
.y + aRay.
c_zy
> 0 )
190
|| ( aRay.
kbyj
*
m_min
.y -
m_min
.z + aRay.
c_yz
< 0 )
191
|| ( aRay.
kbyi
*
m_max
.x -
m_min
.z + aRay.
c_xz
< 0 )
192
|| ( aRay.
ibyk
*
m_max
.z -
m_min
.x + aRay.
c_zx
< 0 ) )
193
return
false
;
194
195
*t = (
m_min
.x - aRay.
m_Origin
.x ) * aRay.
m_InvDir
.x;
196
197
float
t1 = (
m_max
.y - aRay.
m_Origin
.y ) * aRay.
m_InvDir
.y;
198
199
if
( t1 > *t )
200
*t = t1;
201
202
float
t2 = (
m_min
.z - aRay.
m_Origin
.z ) * aRay.
m_InvDir
.z;
203
204
if
( t2 > *t )
205
*t = t2;
206
207
return
true
;
208
}
209
210
case
RAY_CLASSIFICATION::PPM
:
211
{
212
if
( ( aRay.
m_Origin
.x >
m_max
.x ) || ( aRay.
m_Origin
.y >
m_max
.y )
213
|| ( aRay.
m_Origin
.z <
m_min
.z )
214
|| ( aRay.
jbyi
*
m_max
.x -
m_min
.y + aRay.
c_xy
< 0 )
215
|| ( aRay.
ibyj
*
m_max
.y -
m_min
.x + aRay.
c_yx
< 0 )
216
|| ( aRay.
jbyk
*
m_min
.z -
m_min
.y + aRay.
c_zy
< 0 )
217
|| ( aRay.
kbyj
*
m_max
.y -
m_max
.z + aRay.
c_yz
> 0 )
218
|| ( aRay.
kbyi
*
m_max
.x -
m_max
.z + aRay.
c_xz
> 0 )
219
|| ( aRay.
ibyk
*
m_min
.z -
m_min
.x + aRay.
c_zx
< 0 ) )
220
return
false
;
221
222
*t = (
m_min
.x - aRay.
m_Origin
.x ) * aRay.
m_InvDir
.x;
223
224
float
t1 = (
m_min
.y - aRay.
m_Origin
.y ) * aRay.
m_InvDir
.y;
225
226
if
( t1 > *t )
227
*t = t1;
228
229
float
t2 = (
m_max
.z - aRay.
m_Origin
.z ) * aRay.
m_InvDir
.z;
230
231
if
( t2 > *t )
232
*t = t2;
233
234
return
true
;
235
}
236
237
case
RAY_CLASSIFICATION::PPP
:
238
{
239
if
( ( aRay.
m_Origin
.x >
m_max
.x ) || ( aRay.
m_Origin
.y >
m_max
.y )
240
|| ( aRay.
m_Origin
.z >
m_max
.z )
241
|| ( aRay.
jbyi
*
m_max
.x -
m_min
.y + aRay.
c_xy
< 0 )
242
|| ( aRay.
ibyj
*
m_max
.y -
m_min
.x + aRay.
c_yx
< 0 )
243
|| ( aRay.
jbyk
*
m_max
.z -
m_min
.y + aRay.
c_zy
< 0 )
244
|| ( aRay.
kbyj
*
m_max
.y -
m_min
.z + aRay.
c_yz
< 0 )
245
|| ( aRay.
kbyi
*
m_max
.x -
m_min
.z + aRay.
c_xz
< 0 )
246
|| ( aRay.
ibyk
*
m_max
.z -
m_min
.x + aRay.
c_zx
< 0 ) )
247
return
false
;
248
249
*t = (
m_min
.x - aRay.
m_Origin
.x ) * aRay.
m_InvDir
.x;
250
251
float
t1 = (
m_min
.y - aRay.
m_Origin
.y ) * aRay.
m_InvDir
.y;
252
253
if
( t1 > *t )
254
*t = t1;
255
256
float
t2 = (
m_min
.z - aRay.
m_Origin
.z ) * aRay.
m_InvDir
.z;
257
258
if
( t2 > *t )
259
*t = t2;
260
261
return
true
;
262
}
263
264
case
RAY_CLASSIFICATION::OMM
:
265
{
266
if
( ( aRay.
m_Origin
.x <
m_min
.x ) || ( aRay.
m_Origin
.x >
m_max
.x )
267
|| ( aRay.
m_Origin
.y <
m_min
.y ) || ( aRay.
m_Origin
.z <
m_min
.z )
268
|| ( aRay.
jbyk
*
m_min
.z -
m_max
.y + aRay.
c_zy
> 0 )
269
|| ( aRay.
kbyj
*
m_min
.y -
m_max
.z + aRay.
c_yz
> 0 ) )
270
return
false
;
271
272
*t = (
m_max
.y - aRay.
m_Origin
.y ) * aRay.
m_InvDir
.y;
273
274
float
t2 = (
m_max
.z - aRay.
m_Origin
.z ) * aRay.
m_InvDir
.z;
275
276
if
( t2 > *t )
277
*t = t2;
278
279
return
true
;
280
}
281
282
case
RAY_CLASSIFICATION::OMP
:
283
{
284
if
( ( aRay.
m_Origin
.x <
m_min
.x ) || ( aRay.
m_Origin
.x >
m_max
.x )
285
|| ( aRay.
m_Origin
.y <
m_min
.y ) || ( aRay.
m_Origin
.z >
m_max
.z )
286
|| ( aRay.
jbyk
*
m_max
.z -
m_max
.y + aRay.
c_zy
> 0 )
287
|| ( aRay.
kbyj
*
m_min
.y -
m_min
.z + aRay.
c_yz
< 0 ) )
288
return
false
;
289
290
*t = (
m_max
.y - aRay.
m_Origin
.y ) * aRay.
m_InvDir
.y;
291
292
float
t2 = (
m_min
.z - aRay.
m_Origin
.z ) * aRay.
m_InvDir
.z;
293
294
if
( t2 > *t )
295
*t = t2;
296
297
return
true
;
298
}
299
300
case
RAY_CLASSIFICATION::OPM
:
301
{
302
if
( ( aRay.
m_Origin
.x <
m_min
.x ) || ( aRay.
m_Origin
.x >
m_max
.x )
303
|| ( aRay.
m_Origin
.y >
m_max
.y ) || ( aRay.
m_Origin
.z <
m_min
.z )
304
|| ( aRay.
jbyk
*
m_min
.z -
m_min
.y + aRay.
c_zy
< 0 )
305
|| ( aRay.
kbyj
*
m_max
.y -
m_max
.z + aRay.
c_yz
> 0 ) )
306
return
false
;
307
308
*t = (
m_min
.y - aRay.
m_Origin
.y ) * aRay.
m_InvDir
.y;
309
310
float
t2 = (
m_max
.z - aRay.
m_Origin
.z ) * aRay.
m_InvDir
.z;
311
312
if
( t2 > *t )
313
*t = t2;
314
315
return
true
;
316
}
317
318
case
RAY_CLASSIFICATION::OPP
:
319
{
320
if
( ( aRay.
m_Origin
.x <
m_min
.x ) || ( aRay.
m_Origin
.x >
m_max
.x )
321
|| ( aRay.
m_Origin
.y >
m_max
.y ) || ( aRay.
m_Origin
.z >
m_max
.z )
322
|| ( aRay.
jbyk
*
m_max
.z -
m_min
.y + aRay.
c_zy
< 0 )
323
|| ( aRay.
kbyj
*
m_max
.y -
m_min
.z + aRay.
c_yz
< 0 ) )
324
return
false
;
325
326
*t = (
m_min
.y - aRay.
m_Origin
.y ) * aRay.
m_InvDir
.y;
327
328
float
t2 = (
m_min
.z - aRay.
m_Origin
.z ) * aRay.
m_InvDir
.z;
329
330
if
( t2 > *t )
331
*t = t2;
332
333
return
true
;
334
}
335
336
case
RAY_CLASSIFICATION::MOM
:
337
{
338
if
( ( aRay.
m_Origin
.y <
m_min
.y ) || ( aRay.
m_Origin
.y >
m_max
.y )
339
|| ( aRay.
m_Origin
.x <
m_min
.x ) || ( aRay.
m_Origin
.z <
m_min
.z )
340
|| ( aRay.
kbyi
*
m_min
.x -
m_max
.z + aRay.
c_xz
> 0 )
341
|| ( aRay.
ibyk
*
m_min
.z -
m_max
.x + aRay.
c_zx
> 0 ) )
342
return
false
;
343
344
*t = (
m_max
.x - aRay.
m_Origin
.x ) * aRay.
m_InvDir
.x;
345
346
float
t2 = (
m_max
.z - aRay.
m_Origin
.z ) * aRay.
m_InvDir
.z;
347
348
if
( t2 > *t )
349
*t = t2;
350
351
return
true
;
352
}
353
354
case
RAY_CLASSIFICATION::MOP
:
355
{
356
if
( ( aRay.
m_Origin
.y <
m_min
.y ) || ( aRay.
m_Origin
.y >
m_max
.y )
357
|| ( aRay.
m_Origin
.x <
m_min
.x ) || ( aRay.
m_Origin
.z >
m_max
.z )
358
|| ( aRay.
kbyi
*
m_min
.x -
m_min
.z + aRay.
c_xz
< 0 )
359
|| ( aRay.
ibyk
*
m_max
.z -
m_max
.x + aRay.
c_zx
> 0 ) )
360
return
false
;
361
362
*t = (
m_max
.x - aRay.
m_Origin
.x ) * aRay.
m_InvDir
.x;
363
364
float
t2 = (
m_min
.z - aRay.
m_Origin
.z ) * aRay.
m_InvDir
.z;
365
366
if
( t2 > *t )
367
*t = t2;
368
369
return
true
;
370
}
371
372
case
RAY_CLASSIFICATION::POM
:
373
{
374
if
( ( aRay.
m_Origin
.y <
m_min
.y ) || ( aRay.
m_Origin
.y >
m_max
.y )
375
|| ( aRay.
m_Origin
.x >
m_max
.x ) || ( aRay.
m_Origin
.z <
m_min
.z )
376
|| ( aRay.
kbyi
*
m_max
.x -
m_max
.z + aRay.
c_xz
> 0 )
377
|| ( aRay.
ibyk
*
m_min
.z -
m_min
.x + aRay.
c_zx
< 0 ) )
378
return
false
;
379
380
*t = (
m_min
.x - aRay.
m_Origin
.x ) * aRay.
m_InvDir
.x;
381
382
float
t2 = (
m_max
.z - aRay.
m_Origin
.z ) * aRay.
m_InvDir
.z;
383
384
if
( t2 > *t )
385
*t = t2;
386
387
return
true
;
388
}
389
390
case
RAY_CLASSIFICATION::POP
:
391
{
392
if
( ( aRay.
m_Origin
.y <
m_min
.y ) || ( aRay.
m_Origin
.y >
m_max
.y )
393
|| ( aRay.
m_Origin
.x >
m_max
.x ) || ( aRay.
m_Origin
.z >
m_max
.z )
394
|| ( aRay.
kbyi
*
m_max
.x -
m_min
.z + aRay.
c_xz
< 0 )
395
|| ( aRay.
ibyk
*
m_max
.z -
m_min
.x + aRay.
c_zx
< 0 ) )
396
return
false
;
397
398
*t = (
m_min
.x - aRay.
m_Origin
.x ) * aRay.
m_InvDir
.x;
399
400
float
t2 = (
m_min
.z - aRay.
m_Origin
.z ) * aRay.
m_InvDir
.z;
401
402
if
( t2 > *t )
403
*t = t2;
404
405
return
true
;
406
}
407
408
case
RAY_CLASSIFICATION::MMO
:
409
{
410
if
( ( aRay.
m_Origin
.z <
m_min
.z ) || ( aRay.
m_Origin
.z >
m_max
.z )
411
|| ( aRay.
m_Origin
.x <
m_min
.x ) || ( aRay.
m_Origin
.y <
m_min
.y )
412
|| ( aRay.
jbyi
*
m_min
.x -
m_max
.y + aRay.
c_xy
> 0 )
413
|| ( aRay.
ibyj
*
m_min
.y -
m_max
.x + aRay.
c_yx
> 0 ) )
414
return
false
;
415
416
*t = (
m_max
.x - aRay.
m_Origin
.x ) * aRay.
m_InvDir
.x;
417
418
float
t1 = (
m_max
.y - aRay.
m_Origin
.y ) * aRay.
m_InvDir
.y;
419
420
if
( t1 > *t )
421
*t = t1;
422
423
return
true
;
424
}
425
426
case
RAY_CLASSIFICATION::MPO
:
427
{
428
if
( ( aRay.
m_Origin
.z <
m_min
.z ) || ( aRay.
m_Origin
.z >
m_max
.z )
429
|| ( aRay.
m_Origin
.x <
m_min
.x ) || ( aRay.
m_Origin
.y >
m_max
.y )
430
|| ( aRay.
jbyi
*
m_min
.x -
m_min
.y + aRay.
c_xy
< 0 )
431
|| ( aRay.
ibyj
*
m_max
.y -
m_max
.x + aRay.
c_yx
> 0 ) )
432
return
false
;
433
434
*t = (
m_max
.x - aRay.
m_Origin
.x ) * aRay.
m_InvDir
.x;
435
436
float
t1 = (
m_min
.y - aRay.
m_Origin
.y ) * aRay.
m_InvDir
.y;
437
438
if
( t1 > *t )
439
*t = t1;
440
441
return
true
;
442
}
443
444
case
RAY_CLASSIFICATION::PMO
:
445
{
446
if
( ( aRay.
m_Origin
.z <
m_min
.z ) || ( aRay.
m_Origin
.z >
m_max
.z )
447
|| ( aRay.
m_Origin
.x >
m_max
.x ) || ( aRay.
m_Origin
.y <
m_min
.y )
448
|| ( aRay.
jbyi
*
m_max
.x -
m_max
.y + aRay.
c_xy
> 0 )
449
|| ( aRay.
ibyj
*
m_min
.y -
m_min
.x + aRay.
c_yx
< 0 ) )
450
return
false
;
451
452
*t = (
m_min
.x - aRay.
m_Origin
.x ) * aRay.
m_InvDir
.x;
453
454
float
t1 = (
m_max
.y - aRay.
m_Origin
.y ) * aRay.
m_InvDir
.y;
455
456
if
( t1 > *t )
457
*t = t1;
458
459
return
true
;
460
}
461
462
case
RAY_CLASSIFICATION::PPO
:
463
{
464
if
( ( aRay.
m_Origin
.z <
m_min
.z ) || ( aRay.
m_Origin
.z >
m_max
.z )
465
|| ( aRay.
m_Origin
.x >
m_max
.x ) || ( aRay.
m_Origin
.y >
m_max
.y )
466
|| ( aRay.
jbyi
*
m_max
.x -
m_min
.y + aRay.
c_xy
< 0 )
467
|| ( aRay.
ibyj
*
m_max
.y -
m_min
.x + aRay.
c_yx
< 0 ) )
468
return
false
;
469
470
*t = (
m_min
.x - aRay.
m_Origin
.x ) * aRay.
m_InvDir
.x;
471
472
float
t1 = (
m_min
.y - aRay.
m_Origin
.y ) * aRay.
m_InvDir
.y;
473
474
if
( t1 > *t )
475
*t = t1;
476
477
return
true
;
478
}
479
480
case
RAY_CLASSIFICATION::MOO
:
481
{
482
if
( ( aRay.
m_Origin
.x <
m_min
.x ) || ( aRay.
m_Origin
.y <
m_min
.y )
483
|| ( aRay.
m_Origin
.y >
m_max
.y ) || ( aRay.
m_Origin
.z <
m_min
.z )
484
|| ( aRay.
m_Origin
.z >
m_max
.z ) )
485
return
false
;
486
487
*t = (
m_max
.x - aRay.
m_Origin
.x ) * aRay.
m_InvDir
.x;
488
489
return
true
;
490
}
491
492
case
RAY_CLASSIFICATION::POO
:
493
{
494
if
( ( aRay.
m_Origin
.x >
m_max
.x ) || ( aRay.
m_Origin
.y <
m_min
.y )
495
|| ( aRay.
m_Origin
.y >
m_max
.y ) || ( aRay.
m_Origin
.z <
m_min
.z )
496
|| ( aRay.
m_Origin
.z >
m_max
.z ) )
497
return
false
;
498
499
*t = (
m_min
.x - aRay.
m_Origin
.x ) * aRay.
m_InvDir
.x;
500
501
return
true
;
502
}
503
504
case
RAY_CLASSIFICATION::OMO
:
505
{
506
if
( ( aRay.
m_Origin
.y <
m_min
.y ) || ( aRay.
m_Origin
.x <
m_min
.x )
507
|| ( aRay.
m_Origin
.x >
m_max
.x ) || ( aRay.
m_Origin
.z <
m_min
.z )
508
|| ( aRay.
m_Origin
.z >
m_max
.z ) )
509
return
false
;
510
511
*t = (
m_max
.y - aRay.
m_Origin
.y ) * aRay.
m_InvDir
.y;
512
513
return
true
;
514
}
515
516
case
RAY_CLASSIFICATION::OPO
:
517
{
518
if
( ( aRay.
m_Origin
.y >
m_max
.y ) || ( aRay.
m_Origin
.x <
m_min
.x )
519
|| ( aRay.
m_Origin
.x >
m_max
.x ) || ( aRay.
m_Origin
.z <
m_min
.z )
520
|| ( aRay.
m_Origin
.z >
m_max
.z ) )
521
return
false
;
522
523
*t = (
m_min
.y - aRay.
m_Origin
.y ) * aRay.
m_InvDir
.y;
524
525
return
true
;
526
}
527
528
case
RAY_CLASSIFICATION::OOM
:
529
{
530
if
( ( aRay.
m_Origin
.z <
m_min
.z ) || ( aRay.
m_Origin
.x <
m_min
.x )
531
|| ( aRay.
m_Origin
.x >
m_max
.x ) || ( aRay.
m_Origin
.y <
m_min
.y )
532
|| ( aRay.
m_Origin
.y >
m_max
.y ) )
533
return
false
;
534
535
*t = (
m_max
.z - aRay.
m_Origin
.z ) * aRay.
m_InvDir
.z;
536
537
return
true
;
538
}
539
540
case
RAY_CLASSIFICATION::OOP
:
541
{
542
if
( ( aRay.
m_Origin
.z >
m_max
.z ) || ( aRay.
m_Origin
.x <
m_min
.x )
543
|| ( aRay.
m_Origin
.x >
m_max
.x ) || ( aRay.
m_Origin
.y <
m_min
.y )
544
|| ( aRay.
m_Origin
.y >
m_max
.y ) )
545
return
false
;
546
547
*t = (
m_min
.z - aRay.
m_Origin
.z ) * aRay.
m_InvDir
.z;
548
549
return
true
;
550
}
551
}
552
553
return
false
;
554
}
555
556
557
bool
BBOX_3D::Intersect
(
const
RAY
& aRay )
const
558
{
559
switch
( aRay.
m_Classification
)
560
{
561
case
RAY_CLASSIFICATION::MMM
:
562
{
563
if
( ( aRay.
m_Origin
.x <
m_min
.x ) || ( aRay.
m_Origin
.y <
m_min
.y )
564
|| ( aRay.
m_Origin
.z <
m_min
.z )
565
|| ( aRay.
jbyi
*
m_min
.x -
m_max
.y + aRay.
c_xy
> 0 )
566
|| ( aRay.
ibyj
*
m_min
.y -
m_max
.x + aRay.
c_yx
> 0 )
567
|| ( aRay.
jbyk
*
m_min
.z -
m_max
.y + aRay.
c_zy
> 0 )
568
|| ( aRay.
kbyj
*
m_min
.y -
m_max
.z + aRay.
c_yz
> 0 )
569
|| ( aRay.
kbyi
*
m_min
.x -
m_max
.z + aRay.
c_xz
> 0 )
570
|| ( aRay.
ibyk
*
m_min
.z -
m_max
.x + aRay.
c_zx
> 0 ) )
571
return
false
;
572
573
return
true
;
574
}
575
576
case
RAY_CLASSIFICATION::MMP
:
577
{
578
if
( ( aRay.
m_Origin
.x <
m_min
.x ) || ( aRay.
m_Origin
.y <
m_min
.y )
579
|| ( aRay.
m_Origin
.z >
m_max
.z )
580
|| ( aRay.
jbyi
*
m_min
.x -
m_max
.y + aRay.
c_xy
> 0 )
581
|| ( aRay.
ibyj
*
m_min
.y -
m_max
.x + aRay.
c_yx
> 0 )
582
|| ( aRay.
jbyk
*
m_max
.z -
m_max
.y + aRay.
c_zy
> 0 )
583
|| ( aRay.
kbyj
*
m_min
.y -
m_min
.z + aRay.
c_yz
< 0 )
584
|| ( aRay.
kbyi
*
m_min
.x -
m_min
.z + aRay.
c_xz
< 0 )
585
|| ( aRay.
ibyk
*
m_max
.z -
m_max
.x + aRay.
c_zx
> 0 ) )
586
return
false
;
587
588
return
true
;
589
}
590
591
case
RAY_CLASSIFICATION::MPM
:
592
{
593
if
( ( aRay.
m_Origin
.x <
m_min
.x ) || ( aRay.
m_Origin
.y >
m_max
.y )
594
|| ( aRay.
m_Origin
.z <
m_min
.z )
595
|| ( aRay.
jbyi
*
m_min
.x -
m_min
.y + aRay.
c_xy
< 0 )
596
|| ( aRay.
ibyj
*
m_max
.y -
m_max
.x + aRay.
c_yx
> 0 )
597
|| ( aRay.
jbyk
*
m_min
.z -
m_min
.y + aRay.
c_zy
< 0 )
598
|| ( aRay.
kbyj
*
m_max
.y -
m_max
.z + aRay.
c_yz
> 0 )
599
|| ( aRay.
kbyi
*
m_min
.x -
m_max
.z + aRay.
c_xz
> 0 )
600
|| ( aRay.
ibyk
*
m_min
.z -
m_max
.x + aRay.
c_zx
> 0 ) )
601
return
false
;
602
603
return
true
;
604
}
605
606
case
RAY_CLASSIFICATION::MPP
:
607
{
608
if
( ( aRay.
m_Origin
.x <
m_min
.x ) || ( aRay.
m_Origin
.y >
m_max
.y )
609
|| ( aRay.
m_Origin
.z >
m_max
.z )
610
|| ( aRay.
jbyi
*
m_min
.x -
m_min
.y + aRay.
c_xy
< 0 )
611
|| ( aRay.
ibyj
*
m_max
.y -
m_max
.x + aRay.
c_yx
> 0 )
612
|| ( aRay.
jbyk
*
m_max
.z -
m_min
.y + aRay.
c_zy
< 0 )
613
|| ( aRay.
kbyj
*
m_max
.y -
m_min
.z + aRay.
c_yz
< 0 )
614
|| ( aRay.
kbyi
*
m_min
.x -
m_min
.z + aRay.
c_xz
< 0 )
615
|| ( aRay.
ibyk
*
m_max
.z -
m_max
.x + aRay.
c_zx
> 0 ) )
616
return
false
;
617
618
return
true
;
619
}
620
621
case
RAY_CLASSIFICATION::PMM
:
622
{
623
if
( ( aRay.
m_Origin
.x >
m_max
.x ) || ( aRay.
m_Origin
.y <
m_min
.y )
624
|| ( aRay.
m_Origin
.z <
m_min
.z )
625
|| ( aRay.
jbyi
*
m_max
.x -
m_max
.y + aRay.
c_xy
> 0 )
626
|| ( aRay.
ibyj
*
m_min
.y -
m_min
.x + aRay.
c_yx
< 0 )
627
|| ( aRay.
jbyk
*
m_min
.z -
m_max
.y + aRay.
c_zy
> 0 )
628
|| ( aRay.
kbyj
*
m_min
.y -
m_max
.z + aRay.
c_yz
> 0 )
629
|| ( aRay.
kbyi
*
m_max
.x -
m_max
.z + aRay.
c_xz
> 0 )
630
|| ( aRay.
ibyk
*
m_min
.z -
m_min
.x + aRay.
c_zx
< 0 ) )
631
return
false
;
632
633
return
true
;
634
}
635
636
637
case
RAY_CLASSIFICATION::PMP
:
638
{
639
if
( ( aRay.
m_Origin
.x >
m_max
.x ) || ( aRay.
m_Origin
.y <
m_min
.y )
640
|| ( aRay.
m_Origin
.z >
m_max
.z )
641
|| ( aRay.
jbyi
*
m_max
.x -
m_max
.y + aRay.
c_xy
> 0 )
642
|| ( aRay.
ibyj
*
m_min
.y -
m_min
.x + aRay.
c_yx
< 0 )
643
|| ( aRay.
jbyk
*
m_max
.z -
m_max
.y + aRay.
c_zy
> 0 )
644
|| ( aRay.
kbyj
*
m_min
.y -
m_min
.z + aRay.
c_yz
< 0 )
645
|| ( aRay.
kbyi
*
m_max
.x -
m_min
.z + aRay.
c_xz
< 0 )
646
|| ( aRay.
ibyk
*
m_max
.z -
m_min
.x + aRay.
c_zx
< 0 ) )
647
return
false
;
648
649
return
true
;
650
}
651
652
case
RAY_CLASSIFICATION::PPM
:
653
{
654
if
( ( aRay.
m_Origin
.x >
m_max
.x ) || ( aRay.
m_Origin
.y >
m_max
.y )
655
|| ( aRay.
m_Origin
.z <
m_min
.z )
656
|| ( aRay.
jbyi
*
m_max
.x -
m_min
.y + aRay.
c_xy
< 0 )
657
|| ( aRay.
ibyj
*
m_max
.y -
m_min
.x + aRay.
c_yx
< 0 )
658
|| ( aRay.
jbyk
*
m_min
.z -
m_min
.y + aRay.
c_zy
< 0 )
659
|| ( aRay.
kbyj
*
m_max
.y -
m_max
.z + aRay.
c_yz
> 0 )
660
|| ( aRay.
kbyi
*
m_max
.x -
m_max
.z + aRay.
c_xz
> 0 )
661
|| ( aRay.
ibyk
*
m_min
.z -
m_min
.x + aRay.
c_zx
< 0 ) )
662
return
false
;
663
664
return
true
;
665
}
666
667
case
RAY_CLASSIFICATION::PPP
:
668
{
669
if
( ( aRay.
m_Origin
.x >
m_max
.x ) || ( aRay.
m_Origin
.y >
m_max
.y )
670
|| ( aRay.
m_Origin
.z >
m_max
.z )
671
|| ( aRay.
jbyi
*
m_max
.x -
m_min
.y + aRay.
c_xy
< 0 )
672
|| ( aRay.
ibyj
*
m_max
.y -
m_min
.x + aRay.
c_yx
< 0 )
673
|| ( aRay.
jbyk
*
m_max
.z -
m_min
.y + aRay.
c_zy
< 0 )
674
|| ( aRay.
kbyj
*
m_max
.y -
m_min
.z + aRay.
c_yz
< 0 )
675
|| ( aRay.
kbyi
*
m_max
.x -
m_min
.z + aRay.
c_xz
< 0 )
676
|| ( aRay.
ibyk
*
m_max
.z -
m_min
.x + aRay.
c_zx
< 0 ) )
677
return
false
;
678
679
return
true
;
680
}
681
682
case
RAY_CLASSIFICATION::OMM
:
683
{
684
if
( ( aRay.
m_Origin
.x <
m_min
.x ) || ( aRay.
m_Origin
.x >
m_max
.x )
685
|| ( aRay.
m_Origin
.y <
m_min
.y ) || ( aRay.
m_Origin
.z <
m_min
.z )
686
|| ( aRay.
jbyk
*
m_min
.z -
m_max
.y + aRay.
c_zy
> 0 )
687
|| ( aRay.
kbyj
*
m_min
.y -
m_max
.z + aRay.
c_yz
> 0 ) )
688
return
false
;
689
690
return
true
;
691
}
692
693
case
RAY_CLASSIFICATION::OMP
:
694
{
695
if
( ( aRay.
m_Origin
.x <
m_min
.x ) || ( aRay.
m_Origin
.x >
m_max
.x )
696
|| ( aRay.
m_Origin
.y <
m_min
.y ) || ( aRay.
m_Origin
.z >
m_max
.z )
697
|| ( aRay.
jbyk
*
m_max
.z -
m_max
.y + aRay.
c_zy
> 0 )
698
|| ( aRay.
kbyj
*
m_min
.y -
m_min
.z + aRay.
c_yz
< 0 ) )
699
return
false
;
700
701
return
true
;
702
}
703
704
case
RAY_CLASSIFICATION::OPM
:
705
{
706
if
( ( aRay.
m_Origin
.x <
m_min
.x ) || ( aRay.
m_Origin
.x >
m_max
.x )
707
|| ( aRay.
m_Origin
.y >
m_max
.y ) || ( aRay.
m_Origin
.z <
m_min
.z )
708
|| ( aRay.
jbyk
*
m_min
.z -
m_min
.y + aRay.
c_zy
< 0 )
709
|| ( aRay.
kbyj
*
m_max
.y -
m_max
.z + aRay.
c_yz
> 0 ) )
710
return
false
;
711
712
return
true
;
713
}
714
715
case
RAY_CLASSIFICATION::OPP
:
716
{
717
if
( ( aRay.
m_Origin
.x <
m_min
.x ) || ( aRay.
m_Origin
.x >
m_max
.x )
718
|| ( aRay.
m_Origin
.y >
m_max
.y ) || ( aRay.
m_Origin
.z >
m_max
.z )
719
|| ( aRay.
jbyk
*
m_max
.z -
m_min
.y + aRay.
c_zy
< 0 )
720
|| ( aRay.
kbyj
*
m_max
.y -
m_min
.z + aRay.
c_yz
< 0 ) )
721
return
false
;
722
723
return
true
;
724
}
725
726
case
RAY_CLASSIFICATION::MOM
:
727
{
728
if
( ( aRay.
m_Origin
.y <
m_min
.y ) || ( aRay.
m_Origin
.y >
m_max
.y )
729
|| ( aRay.
m_Origin
.x <
m_min
.x ) || ( aRay.
m_Origin
.z <
m_min
.z )
730
|| ( aRay.
kbyi
*
m_min
.x -
m_max
.z + aRay.
c_xz
> 0 )
731
|| ( aRay.
ibyk
*
m_min
.z -
m_max
.x + aRay.
c_zx
> 0 ) )
732
return
false
;
733
734
return
true
;
735
}
736
737
case
RAY_CLASSIFICATION::MOP
:
738
{
739
if
( ( aRay.
m_Origin
.y <
m_min
.y ) || ( aRay.
m_Origin
.y >
m_max
.y )
740
|| ( aRay.
m_Origin
.x <
m_min
.x ) || ( aRay.
m_Origin
.z >
m_max
.z )
741
|| ( aRay.
kbyi
*
m_min
.x -
m_min
.z + aRay.
c_xz
< 0 )
742
|| ( aRay.
ibyk
*
m_max
.z -
m_max
.x + aRay.
c_zx
> 0 ) )
743
return
false
;
744
745
return
true
;
746
}
747
748
case
RAY_CLASSIFICATION::POM
:
749
{
750
if
( ( aRay.
m_Origin
.y <
m_min
.y ) || ( aRay.
m_Origin
.y >
m_max
.y )
751
|| ( aRay.
m_Origin
.x >
m_max
.x ) || ( aRay.
m_Origin
.z <
m_min
.z )
752
|| ( aRay.
kbyi
*
m_max
.x -
m_max
.z + aRay.
c_xz
> 0 )
753
|| ( aRay.
ibyk
*
m_min
.z -
m_min
.x + aRay.
c_zx
< 0 ) )
754
return
false
;
755
756
return
true
;
757
}
758
759
case
RAY_CLASSIFICATION::POP
:
760
{
761
if
( ( aRay.
m_Origin
.y <
m_min
.y ) || ( aRay.
m_Origin
.y >
m_max
.y )
762
|| ( aRay.
m_Origin
.x >
m_max
.x ) || ( aRay.
m_Origin
.z >
m_max
.z )
763
|| ( aRay.
kbyi
*
m_max
.x -
m_min
.z + aRay.
c_xz
< 0 )
764
|| ( aRay.
ibyk
*
m_max
.z -
m_min
.x + aRay.
c_zx
< 0 ) )
765
return
false
;
766
767
return
true
;
768
}
769
770
case
RAY_CLASSIFICATION::MMO
:
771
{
772
if
( ( aRay.
m_Origin
.z <
m_min
.z ) || ( aRay.
m_Origin
.z >
m_max
.z )
773
|| ( aRay.
m_Origin
.x <
m_min
.x ) || ( aRay.
m_Origin
.y <
m_min
.y )
774
|| ( aRay.
jbyi
*
m_min
.x -
m_max
.y + aRay.
c_xy
> 0 )
775
|| ( aRay.
ibyj
*
m_min
.y -
m_max
.x + aRay.
c_yx
> 0 ) )
776
return
false
;
777
778
return
true
;
779
}
780
781
case
RAY_CLASSIFICATION::MPO
:
782
{
783
if
( ( aRay.
m_Origin
.z <
m_min
.z ) || ( aRay.
m_Origin
.z >
m_max
.z )
784
|| ( aRay.
m_Origin
.x <
m_min
.x ) || ( aRay.
m_Origin
.y >
m_max
.y )
785
|| ( aRay.
jbyi
*
m_min
.x -
m_min
.y + aRay.
c_xy
< 0 )
786
|| ( aRay.
ibyj
*
m_max
.y -
m_max
.x + aRay.
c_yx
> 0 ) )
787
return
false
;
788
789
return
true
;
790
}
791
792
case
RAY_CLASSIFICATION::PMO
:
793
{
794
if
( ( aRay.
m_Origin
.z <
m_min
.z ) || ( aRay.
m_Origin
.z >
m_max
.z )
795
|| ( aRay.
m_Origin
.x >
m_max
.x ) || ( aRay.
m_Origin
.y <
m_min
.y )
796
|| ( aRay.
jbyi
*
m_max
.x -
m_max
.y + aRay.
c_xy
> 0 )
797
|| ( aRay.
ibyj
*
m_min
.y -
m_min
.x + aRay.
c_yx
< 0 ) )
798
return
false
;
799
800
return
true
;
801
}
802
803
case
RAY_CLASSIFICATION::PPO
:
804
{
805
if
( ( aRay.
m_Origin
.z <
m_min
.z ) || ( aRay.
m_Origin
.z >
m_max
.z )
806
|| ( aRay.
m_Origin
.x >
m_max
.x ) || ( aRay.
m_Origin
.y >
m_max
.y )
807
|| ( aRay.
jbyi
*
m_max
.x -
m_min
.y + aRay.
c_xy
< 0 )
808
|| ( aRay.
ibyj
*
m_max
.y -
m_min
.x + aRay.
c_yx
< 0 ) )
809
return
false
;
810
811
return
true
;
812
}
813
814
case
RAY_CLASSIFICATION::MOO
:
815
{
816
if
( ( aRay.
m_Origin
.x <
m_min
.x ) || ( aRay.
m_Origin
.y <
m_min
.y )
817
|| ( aRay.
m_Origin
.y >
m_max
.y ) || ( aRay.
m_Origin
.z <
m_min
.z )
818
|| ( aRay.
m_Origin
.z >
m_max
.z ) )
819
return
false
;
820
821
return
true
;
822
}
823
824
case
RAY_CLASSIFICATION::POO
:
825
{
826
if
( ( aRay.
m_Origin
.x >
m_max
.x ) || ( aRay.
m_Origin
.y <
m_min
.y )
827
|| ( aRay.
m_Origin
.y >
m_max
.y ) || ( aRay.
m_Origin
.z <
m_min
.z )
828
|| ( aRay.
m_Origin
.z >
m_max
.z ) )
829
return
false
;
830
831
return
true
;
832
}
833
834
case
RAY_CLASSIFICATION::OMO
:
835
{
836
if
( ( aRay.
m_Origin
.y <
m_min
.y ) || ( aRay.
m_Origin
.x <
m_min
.x )
837
|| ( aRay.
m_Origin
.x >
m_max
.x ) || ( aRay.
m_Origin
.z <
m_min
.z )
838
|| ( aRay.
m_Origin
.z >
m_max
.z ) )
839
return
false
;
840
841
return
true
;
842
}
843
844
case
RAY_CLASSIFICATION::OPO
:
845
{
846
if
( ( aRay.
m_Origin
.y >
m_max
.y ) || ( aRay.
m_Origin
.x <
m_min
.x )
847
|| ( aRay.
m_Origin
.x >
m_max
.x ) || ( aRay.
m_Origin
.z <
m_min
.z )
848
|| ( aRay.
m_Origin
.z >
m_max
.z ) )
849
return
false
;
850
851
return
true
;
852
}
853
854
case
RAY_CLASSIFICATION::OOM
:
855
{
856
if
( ( aRay.
m_Origin
.z <
m_min
.z ) || ( aRay.
m_Origin
.x <
m_min
.x )
857
|| ( aRay.
m_Origin
.x >
m_max
.x ) || ( aRay.
m_Origin
.y <
m_min
.y )
858
|| ( aRay.
m_Origin
.y >
m_max
.y ) )
859
return
false
;
860
861
return
true
;
862
}
863
864
case
RAY_CLASSIFICATION::OOP
:
865
{
866
if
( ( aRay.
m_Origin
.z >
m_max
.z ) || ( aRay.
m_Origin
.x <
m_min
.x )
867
|| ( aRay.
m_Origin
.x >
m_max
.x ) || ( aRay.
m_Origin
.y <
m_min
.y )
868
|| ( aRay.
m_Origin
.y >
m_max
.y ) )
869
return
false
;
870
871
return
true
;
872
}
873
}
874
875
return
false
;
876
}
bbox_3d.h
Bounding Box class definition.
ray.h
RAY_CLASSIFICATION::MPM
@ MPM
Definition
ray.h:31
RAY_CLASSIFICATION::PPO
@ PPO
Definition
ray.h:54
RAY_CLASSIFICATION::MMO
@ MMO
Definition
ray.h:51
RAY_CLASSIFICATION::OPM
@ OPM
Definition
ray.h:45
RAY_CLASSIFICATION::MMM
@ MMM
Definition
ray.h:29
RAY_CLASSIFICATION::OPP
@ OPP
Definition
ray.h:46
RAY_CLASSIFICATION::PPM
@ PPM
Definition
ray.h:35
RAY_CLASSIFICATION::POO
@ POO
Definition
ray.h:37
RAY_CLASSIFICATION::OOM
@ OOM
Definition
ray.h:42
RAY_CLASSIFICATION::OMP
@ OMP
Definition
ray.h:44
RAY_CLASSIFICATION::MMP
@ MMP
Definition
ray.h:30
RAY_CLASSIFICATION::MOM
@ MOM
Definition
ray.h:47
RAY_CLASSIFICATION::OMO
@ OMO
Definition
ray.h:40
RAY_CLASSIFICATION::PMO
@ PMO
Definition
ray.h:53
RAY_CLASSIFICATION::PMP
@ PMP
Definition
ray.h:34
RAY_CLASSIFICATION::MPO
@ MPO
Definition
ray.h:52
RAY_CLASSIFICATION::OPO
@ OPO
Definition
ray.h:39
RAY_CLASSIFICATION::PMM
@ PMM
Definition
ray.h:33
RAY_CLASSIFICATION::MOO
@ MOO
Definition
ray.h:38
RAY_CLASSIFICATION::MOP
@ MOP
Definition
ray.h:48
RAY_CLASSIFICATION::PPP
@ PPP
Definition
ray.h:36
RAY_CLASSIFICATION::MPP
@ MPP
Definition
ray.h:32
RAY_CLASSIFICATION::OOP
@ OOP
Definition
ray.h:41
RAY_CLASSIFICATION::POM
@ POM
Definition
ray.h:49
RAY_CLASSIFICATION::OMM
@ OMM
Definition
ray.h:43
RAY_CLASSIFICATION::POP
@ POP
Definition
ray.h:50
BBOX_3D::Intersect
bool Intersect(const RAY &aRay, float *t) const
Definition
bbox_3d_ray.cpp:42
BBOX_3D::m_min
SFVEC3F m_min
(12) point of the lower position of the bounding box
Definition
bbox_3d.h:233
BBOX_3D::m_max
SFVEC3F m_max
(12) point of the higher position of the bounding box
Definition
bbox_3d.h:234
RAY
Definition
ray.h:59
RAY::ibyj
float ibyj
Definition
ray.h:68
RAY::c_zx
float c_zx
Definition
ray.h:69
RAY::jbyk
float jbyk
Definition
ray.h:68
RAY::m_Classification
RAY_CLASSIFICATION m_Classification
Definition
ray.h:64
RAY::jbyi
float jbyi
Definition
ray.h:68
RAY::c_xz
float c_xz
Definition
ray.h:69
RAY::c_xy
float c_xy
Definition
ray.h:69
RAY::c_yz
float c_yz
Definition
ray.h:69
RAY::kbyi
float kbyi
Definition
ray.h:68
RAY::m_InvDir
SFVEC3F m_InvDir
Definition
ray.h:66
RAY::m_Origin
SFVEC3F m_Origin
Definition
ray.h:60
RAY::ibyk
float ibyk
Definition
ray.h:68
RAY::c_yx
float c_yx
Definition
ray.h:69
RAY::c_zy
float c_zy
Definition
ray.h:69
RAY::kbyj
float kbyj
Definition
ray.h:68
src
3d-viewer
3d_rendering
raytracing
shapes3D
bbox_3d_ray.cpp
Generated on Fri Jun 26 2026 00:05:31 for KiCad PCB EDA Suite by
1.13.2