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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
|
<html>
<head>
<title>NVIDIA(R) Blast(R) SDK 1.1 Source Reference: sdk/extensions/authoring/source/VHACD/inc/FloatMath.h Source File</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<LINK HREF="NVIDIA.css" REL="stylesheet" TYPE="text/css">
</head>
<body bgcolor="#FFFFFF">
<div id="header">
<hr class="first">
<img alt="" src="blast_logo.png">
<br>
<center>
<a class="qindex" href="main.html">Main Page</a>
<!-- <a class="qindex" href="hierarchy.html">Class Hierarchy</a> //-->
<a class="qindex" href="annotated.html">Class List</a>
<a class="qindex" href="functions.html">Class Members</a>
</center>
<hr class="second">
</div>
<!-- Generated by Doxygen 1.5.8 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="main.html"><span>Main Page</span></a></li>
<li><a href="pages.html"><span>User's Guide</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File List</span></a></li>
<li><a href="globals.html"><span>File Members</span></a></li>
</ul>
</div>
<h1>sdk/extensions/authoring/source/VHACD/inc/FloatMath.h</h1><a href="_float_math_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef FLOAT_MATH_LIB_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span>
<a name="l00003"></a>00003 <span class="preprocessor">#define FLOAT_MATH_LIB_H</span>
<a name="l00004"></a>00004 <span class="preprocessor"></span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="preprocessor">#include <float.h></span>
<a name="l00007"></a>00007 <span class="preprocessor">#include <stdint.h></span>
<a name="l00008"></a>00008
<a name="l00009"></a><a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html">00009</a> <span class="keyword">namespace </span>FLOAT_MATH
<a name="l00010"></a>00010 {
<a name="l00011"></a>00011
<a name="l00012"></a><a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#e3424939e23d0f14e1a0c1745e43f9af">00012</a> <span class="keyword">enum</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#e3424939e23d0f14e1a0c1745e43f9af">FM_ClipState</a>
<a name="l00013"></a>00013 {
<a name="l00014"></a><a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#e3424939e23d0f14e1a0c1745e43f9af9df27601d6ae82936064ca3010b80a5f">00014</a> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#e3424939e23d0f14e1a0c1745e43f9af9df27601d6ae82936064ca3010b80a5f">FMCS_XMIN</a> = (1<<0),
<a name="l00015"></a><a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#e3424939e23d0f14e1a0c1745e43f9afe45bdfb2c4086bde450b8af70d756585">00015</a> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#e3424939e23d0f14e1a0c1745e43f9afe45bdfb2c4086bde450b8af70d756585">FMCS_XMAX</a> = (1<<1),
<a name="l00016"></a><a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#e3424939e23d0f14e1a0c1745e43f9afd03a9eb1a839f2cb34508a7233906175">00016</a> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#e3424939e23d0f14e1a0c1745e43f9afd03a9eb1a839f2cb34508a7233906175">FMCS_YMIN</a> = (1<<2),
<a name="l00017"></a><a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#e3424939e23d0f14e1a0c1745e43f9afae2ee30933040ceaba04d40a1eb098fd">00017</a> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#e3424939e23d0f14e1a0c1745e43f9afae2ee30933040ceaba04d40a1eb098fd">FMCS_YMAX</a> = (1<<3),
<a name="l00018"></a><a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#e3424939e23d0f14e1a0c1745e43f9afc8adc6db98a363354407d4eb1df66a87">00018</a> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#e3424939e23d0f14e1a0c1745e43f9afc8adc6db98a363354407d4eb1df66a87">FMCS_ZMIN</a> = (1<<4),
<a name="l00019"></a><a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#e3424939e23d0f14e1a0c1745e43f9aff6824c785aa66d10c8b39b8fa86375cb">00019</a> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#e3424939e23d0f14e1a0c1745e43f9aff6824c785aa66d10c8b39b8fa86375cb">FMCS_ZMAX</a> = (1<<5),
<a name="l00020"></a>00020 };
<a name="l00021"></a>00021
<a name="l00022"></a><a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#8f56ed9e1763d1e33bb24d5c11356c78">00022</a> <span class="keyword">enum</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#8f56ed9e1763d1e33bb24d5c11356c78">FM_Axis</a>
<a name="l00023"></a>00023 {
<a name="l00024"></a><a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#8f56ed9e1763d1e33bb24d5c11356c78cf27da21bcf3eb6bbaa8c5f24254dcef">00024</a> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#8f56ed9e1763d1e33bb24d5c11356c78cf27da21bcf3eb6bbaa8c5f24254dcef">FM_XAXIS</a> = (1<<0),
<a name="l00025"></a><a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#8f56ed9e1763d1e33bb24d5c11356c786d608e9c6b6761a8cfbcdc7470d4e894">00025</a> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#8f56ed9e1763d1e33bb24d5c11356c786d608e9c6b6761a8cfbcdc7470d4e894">FM_YAXIS</a> = (1<<1),
<a name="l00026"></a><a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#8f56ed9e1763d1e33bb24d5c11356c78c78cb90c59826b6320fd1891088b1c07">00026</a> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#8f56ed9e1763d1e33bb24d5c11356c78c78cb90c59826b6320fd1891088b1c07">FM_ZAXIS</a> = (1<<2)
<a name="l00027"></a>00027 };
<a name="l00028"></a>00028
<a name="l00029"></a><a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#122981f0e26b79857ccec1d29e24bfe9">00029</a> <span class="keyword">enum</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#122981f0e26b79857ccec1d29e24bfe9">LineSegmentType</a>
<a name="l00030"></a>00030 {
<a name="l00031"></a><a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#122981f0e26b79857ccec1d29e24bfe9fb71f22022e7b20c1cffe0d767794516">00031</a> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#122981f0e26b79857ccec1d29e24bfe9fb71f22022e7b20c1cffe0d767794516">LS_START</a>,
<a name="l00032"></a><a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#122981f0e26b79857ccec1d29e24bfe9eddaa7664a1a0987313b33a7991dabc9">00032</a> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#122981f0e26b79857ccec1d29e24bfe9eddaa7664a1a0987313b33a7991dabc9">LS_MIDDLE</a>,
<a name="l00033"></a><a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#122981f0e26b79857ccec1d29e24bfe9e1972ba2d53acc5b40a7186e9463724f">00033</a> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#122981f0e26b79857ccec1d29e24bfe9e1972ba2d53acc5b40a7186e9463724f">LS_END</a>
<a name="l00034"></a>00034 };
<a name="l00035"></a>00035
<a name="l00036"></a>00036
<a name="l00037"></a><a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#bb8140d5d40ac95d14d060b3df484650">00037</a> <span class="keyword">const</span> <span class="keywordtype">float</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#bb8140d5d40ac95d14d060b3df484650">FM_PI</a> = 3.1415926535897932384626433832795028841971693993751f;
<a name="l00038"></a><a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#e0d9cd328d51cec3b434cc0a5ac1aa76">00038</a> <span class="keyword">const</span> <span class="keywordtype">float</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#e0d9cd328d51cec3b434cc0a5ac1aa76">FM_DEG_TO_RAD</a> = ((2.0f * FM_PI) / 360.0f);
<a name="l00039"></a><a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#7bf8c2dde51efeefb5212bf855aa29f9">00039</a> <span class="keyword">const</span> <span class="keywordtype">float</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#7bf8c2dde51efeefb5212bf855aa29f9">FM_RAD_TO_DEG</a> = (360.0f / (2.0f * FM_PI));
<a name="l00040"></a>00040
<a name="l00041"></a>00041 <span class="comment">//***************** Float versions</span>
<a name="l00042"></a>00042 <span class="comment">//***</span>
<a name="l00043"></a>00043 <span class="comment">//*** vectors are assumed to be 3 floats or 3 doubles representing X, Y, Z</span>
<a name="l00044"></a>00044 <span class="comment">//*** quaternions are assumed to be 4 floats or 4 doubles representing X,Y,Z,W</span>
<a name="l00045"></a>00045 <span class="comment">//*** matrices are assumed to be 16 floats or 16 doubles representing a standard D3D or OpenGL style 4x4 matrix</span>
<a name="l00046"></a>00046 <span class="comment">//*** bounding volumes are expressed as two sets of 3 floats/double representing bmin(x,y,z) and bmax(x,y,z)</span>
<a name="l00047"></a>00047 <span class="comment">//*** Plane equations are assumed to be 4 floats or 4 doubles representing Ax,By,Cz,D</span>
<a name="l00048"></a>00048
<a name="l00049"></a>00049 <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#8f56ed9e1763d1e33bb24d5c11356c78">FM_Axis</a> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#b0e6f3d995aaa137c6811be7da8b1f57">fm_getDominantAxis</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> <a class="code" href="namespace_nv_1_1_blast_1_1_vec_math.html#1c8d1bbcf531b04e6ff52f5357987794">normal</a>[3]);
<a name="l00050"></a>00050 <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#8f56ed9e1763d1e33bb24d5c11356c78">FM_Axis</a> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#b0e6f3d995aaa137c6811be7da8b1f57">fm_getDominantAxis</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> <a class="code" href="namespace_nv_1_1_blast_1_1_vec_math.html#1c8d1bbcf531b04e6ff52f5357987794">normal</a>[3]);
<a name="l00051"></a>00051
<a name="l00052"></a>00052 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#518c9e9f1a383ae51f1400e00168b04d">fm_decomposeTransform</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> local_transform[16],<span class="keywordtype">float</span> trans[3],<span class="keywordtype">float</span> rot[4],<span class="keywordtype">float</span> scale[3]);
<a name="l00053"></a>00053 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#518c9e9f1a383ae51f1400e00168b04d">fm_decomposeTransform</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> local_transform[16],<span class="keywordtype">double</span> trans[3],<span class="keywordtype">double</span> rot[4],<span class="keywordtype">double</span> scale[3]);
<a name="l00054"></a>00054
<a name="l00055"></a>00055 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#cbed8443ddbc88cc4408363938cb9b90">fm_multiplyTransform</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> *pA,<span class="keyword">const</span> <span class="keywordtype">float</span> *pB,<span class="keywordtype">float</span> *pM);
<a name="l00056"></a>00056 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#cbed8443ddbc88cc4408363938cb9b90">fm_multiplyTransform</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> *pA,<span class="keyword">const</span> <span class="keywordtype">double</span> *pB,<span class="keywordtype">double</span> *pM);
<a name="l00057"></a>00057
<a name="l00058"></a>00058 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#459b88458014177d8945f6e8b269730c">fm_inverseTransform</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> matrix[16],<span class="keywordtype">float</span> inverse_matrix[16]);
<a name="l00059"></a>00059 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#459b88458014177d8945f6e8b269730c">fm_inverseTransform</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> matrix[16],<span class="keywordtype">double</span> inverse_matrix[16]);
<a name="l00060"></a>00060
<a name="l00061"></a>00061 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#475707467603b8b04da3692140ab438b">fm_identity</a>(<span class="keywordtype">float</span> matrix[16]); <span class="comment">// set 4x4 matrix to identity.</span>
<a name="l00062"></a>00062 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#475707467603b8b04da3692140ab438b">fm_identity</a>(<span class="keywordtype">double</span> matrix[16]); <span class="comment">// set 4x4 matrix to identity.</span>
<a name="l00063"></a>00063
<a name="l00064"></a>00064 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#afb68480d229fd7dabd59dea38dff21c">fm_inverseRT</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> matrix[16], <span class="keyword">const</span> <span class="keywordtype">float</span> pos[3], <span class="keywordtype">float</span> t[3]); <span class="comment">// inverse rotate translate the point.</span>
<a name="l00065"></a>00065 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#afb68480d229fd7dabd59dea38dff21c">fm_inverseRT</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> matrix[16],<span class="keyword">const</span> <span class="keywordtype">double</span> pos[3],<span class="keywordtype">double</span> t[3]); <span class="comment">// inverse rotate translate the point.</span>
<a name="l00066"></a>00066
<a name="l00067"></a>00067 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#5e7bcf0c2005abcdfb3b983befdba6e0">fm_transform</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> matrix[16], <span class="keyword">const</span> <span class="keywordtype">float</span> pos[3], <span class="keywordtype">float</span> t[3]); <span class="comment">// rotate and translate this point.</span>
<a name="l00068"></a>00068 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#5e7bcf0c2005abcdfb3b983befdba6e0">fm_transform</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> matrix[16],<span class="keyword">const</span> <span class="keywordtype">double</span> pos[3],<span class="keywordtype">double</span> t[3]); <span class="comment">// rotate and translate this point.</span>
<a name="l00069"></a>00069
<a name="l00070"></a>00070 <span class="keywordtype">float</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#1507bf2ee9f33cc24aae9f3be4169e39">fm_getDeterminant</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> matrix[16]);
<a name="l00071"></a>00071 <span class="keywordtype">double</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#1507bf2ee9f33cc24aae9f3be4169e39">fm_getDeterminant</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> matrix[16]);
<a name="l00072"></a>00072
<a name="l00073"></a>00073 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#955922bac08140d8027099632304d507">fm_getSubMatrix</a>(int32_t ki,int32_t kj,<span class="keywordtype">float</span> pDst[16],<span class="keyword">const</span> <span class="keywordtype">float</span> matrix[16]);
<a name="l00074"></a>00074 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#955922bac08140d8027099632304d507">fm_getSubMatrix</a>(int32_t ki,int32_t kj,<span class="keywordtype">double</span> pDst[16],<span class="keyword">const</span> <span class="keywordtype">float</span> matrix[16]);
<a name="l00075"></a>00075
<a name="l00076"></a>00076 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#9709ed7da00dd74d859b47c48d824eeb">fm_rotate</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> matrix[16],<span class="keyword">const</span> <span class="keywordtype">float</span> pos[3],<span class="keywordtype">float</span> t[3]); <span class="comment">// only rotate the point by a 4x4 matrix, don't translate.</span>
<a name="l00077"></a>00077 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#9709ed7da00dd74d859b47c48d824eeb">fm_rotate</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> matri[16],<span class="keyword">const</span> <span class="keywordtype">double</span> pos[3],<span class="keywordtype">double</span> t[3]); <span class="comment">// only rotate the point by a 4x4 matrix, don't translate.</span>
<a name="l00078"></a>00078
<a name="l00079"></a>00079 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#21696a79d14003a743b2b1ff40894b70">fm_eulerToMatrix</a>(<span class="keywordtype">float</span> ax,<span class="keywordtype">float</span> ay,<span class="keywordtype">float</span> az,<span class="keywordtype">float</span> matrix[16]); <span class="comment">// convert euler (in radians) to a dest 4x4 matrix (translation set to zero)</span>
<a name="l00080"></a>00080 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#21696a79d14003a743b2b1ff40894b70">fm_eulerToMatrix</a>(<span class="keywordtype">double</span> ax,<span class="keywordtype">double</span> ay,<span class="keywordtype">double</span> az,<span class="keywordtype">double</span> matrix[16]); <span class="comment">// convert euler (in radians) to a dest 4x4 matrix (translation set to zero)</span>
<a name="l00081"></a>00081
<a name="l00082"></a>00082 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#1defa5e1cac1adb9265c5f0a3d4c9645">fm_getAABB</a>(uint32_t vcount,<span class="keyword">const</span> <span class="keywordtype">float</span> *points,uint32_t pstride,<span class="keywordtype">float</span> bmin[3],<span class="keywordtype">float</span> bmax[3]);
<a name="l00083"></a>00083 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#1defa5e1cac1adb9265c5f0a3d4c9645">fm_getAABB</a>(uint32_t vcount,<span class="keyword">const</span> <span class="keywordtype">double</span> *points,uint32_t pstride,<span class="keywordtype">double</span> bmin[3],<span class="keywordtype">double</span> bmax[3]);
<a name="l00084"></a>00084
<a name="l00085"></a>00085 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#c9c372bec084a96bb461107edb5d01c4">fm_getAABBCenter</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> bmin[3],<span class="keyword">const</span> <span class="keywordtype">float</span> bmax[3],<span class="keywordtype">float</span> center[3]);
<a name="l00086"></a>00086 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#c9c372bec084a96bb461107edb5d01c4">fm_getAABBCenter</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> bmin[3],<span class="keyword">const</span> <span class="keywordtype">double</span> bmax[3],<span class="keywordtype">double</span> center[3]);
<a name="l00087"></a>00087
<a name="l00088"></a>00088 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#bf97767bcddaed89a04998a225044262">fm_transformAABB</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> bmin[3],<span class="keyword">const</span> <span class="keywordtype">float</span> bmax[3],<span class="keyword">const</span> <span class="keywordtype">float</span> matrix[16],<span class="keywordtype">float</span> tbmin[3],<span class="keywordtype">float</span> tbmax[3]);
<a name="l00089"></a>00089 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#bf97767bcddaed89a04998a225044262">fm_transformAABB</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> bmin[3],<span class="keyword">const</span> <span class="keywordtype">double</span> bmax[3],<span class="keyword">const</span> <span class="keywordtype">double</span> matrix[16],<span class="keywordtype">double</span> tbmin[3],<span class="keywordtype">double</span> tbmax[3]);
<a name="l00090"></a>00090
<a name="l00091"></a>00091 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#afae02ac2136cb97fb7683194968f934">fm_eulerToQuat</a>(<span class="keywordtype">float</span> <a class="code" href="bt_vector3_8h.html#0d05bb202a57e1c47ae0eeeec2502c1b" title="Return the x value.">x</a>,<span class="keywordtype">float</span> <a class="code" href="bt_vector3_8h.html#88617d2888b444b2ad2384b17b0eeadf" title="Return the y value.">y</a>,<span class="keywordtype">float</span> <a class="code" href="bt_vector3_8h.html#49dd8d4770be4de32dd57f9b926aa396" title="Return the z value.">z</a>,<span class="keywordtype">float</span> quat[4]); <span class="comment">// convert euler angles to quaternion.</span>
<a name="l00092"></a>00092 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#afae02ac2136cb97fb7683194968f934">fm_eulerToQuat</a>(<span class="keywordtype">double</span> <a class="code" href="bt_vector3_8h.html#0d05bb202a57e1c47ae0eeeec2502c1b" title="Return the x value.">x</a>,<span class="keywordtype">double</span> <a class="code" href="bt_vector3_8h.html#88617d2888b444b2ad2384b17b0eeadf" title="Return the y value.">y</a>,<span class="keywordtype">double</span> <a class="code" href="bt_vector3_8h.html#49dd8d4770be4de32dd57f9b926aa396" title="Return the z value.">z</a>,<span class="keywordtype">double</span> quat[4]); <span class="comment">// convert euler angles to quaternion.</span>
<a name="l00093"></a>00093
<a name="l00094"></a>00094 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#fd1c4745cc5047b78dc32a107ce1b227">fm_quatToEuler</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> quat[4],<span class="keywordtype">float</span> &ax,<span class="keywordtype">float</span> &ay,<span class="keywordtype">float</span> &az);
<a name="l00095"></a>00095 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#fd1c4745cc5047b78dc32a107ce1b227">fm_quatToEuler</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> quat[4],<span class="keywordtype">double</span> &ax,<span class="keywordtype">double</span> &ay,<span class="keywordtype">double</span> &az);
<a name="l00096"></a>00096
<a name="l00097"></a>00097 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#afae02ac2136cb97fb7683194968f934">fm_eulerToQuat</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> euler[3],<span class="keywordtype">float</span> quat[4]); <span class="comment">// convert euler angles to quaternion. Angles must be radians not degrees!</span>
<a name="l00098"></a>00098 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#afae02ac2136cb97fb7683194968f934">fm_eulerToQuat</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> euler[3],<span class="keywordtype">double</span> quat[4]); <span class="comment">// convert euler angles to quaternion.</span>
<a name="l00099"></a>00099
<a name="l00100"></a>00100 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#a8e5d1da135d36933bfae6ec7a4e16dc">fm_scale</a>(<span class="keywordtype">float</span> <a class="code" href="bt_vector3_8h.html#0d05bb202a57e1c47ae0eeeec2502c1b" title="Return the x value.">x</a>,<span class="keywordtype">float</span> <a class="code" href="bt_vector3_8h.html#88617d2888b444b2ad2384b17b0eeadf" title="Return the y value.">y</a>,<span class="keywordtype">float</span> <a class="code" href="bt_vector3_8h.html#49dd8d4770be4de32dd57f9b926aa396" title="Return the z value.">z</a>,<span class="keywordtype">float</span> matrix[16]); <span class="comment">// apply scale to the matrix.</span>
<a name="l00101"></a>00101 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#a8e5d1da135d36933bfae6ec7a4e16dc">fm_scale</a>(<span class="keywordtype">double</span> <a class="code" href="bt_vector3_8h.html#0d05bb202a57e1c47ae0eeeec2502c1b" title="Return the x value.">x</a>,<span class="keywordtype">double</span> <a class="code" href="bt_vector3_8h.html#88617d2888b444b2ad2384b17b0eeadf" title="Return the y value.">y</a>,<span class="keywordtype">double</span> <a class="code" href="bt_vector3_8h.html#49dd8d4770be4de32dd57f9b926aa396" title="Return the z value.">z</a>,<span class="keywordtype">double</span> matrix[16]); <span class="comment">// apply scale to the matrix.</span>
<a name="l00102"></a>00102
<a name="l00103"></a>00103 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#4aeae548e32c6b3fd7b042880853668a">fm_eulerToQuatDX</a>(<span class="keywordtype">float</span> <a class="code" href="bt_vector3_8h.html#0d05bb202a57e1c47ae0eeeec2502c1b" title="Return the x value.">x</a>,<span class="keywordtype">float</span> <a class="code" href="bt_vector3_8h.html#88617d2888b444b2ad2384b17b0eeadf" title="Return the y value.">y</a>,<span class="keywordtype">float</span> <a class="code" href="bt_vector3_8h.html#49dd8d4770be4de32dd57f9b926aa396" title="Return the z value.">z</a>,<span class="keywordtype">float</span> quat[4]); <span class="comment">// convert euler angles to quaternion using the fucked up DirectX method</span>
<a name="l00104"></a>00104 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#4aeae548e32c6b3fd7b042880853668a">fm_eulerToQuatDX</a>(<span class="keywordtype">double</span> <a class="code" href="bt_vector3_8h.html#0d05bb202a57e1c47ae0eeeec2502c1b" title="Return the x value.">x</a>,<span class="keywordtype">double</span> <a class="code" href="bt_vector3_8h.html#88617d2888b444b2ad2384b17b0eeadf" title="Return the y value.">y</a>,<span class="keywordtype">double</span> <a class="code" href="bt_vector3_8h.html#49dd8d4770be4de32dd57f9b926aa396" title="Return the z value.">z</a>,<span class="keywordtype">double</span> quat[4]); <span class="comment">// convert euler angles to quaternion using the fucked up DirectX method</span>
<a name="l00105"></a>00105
<a name="l00106"></a>00106 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#c80feefbeefd17402f51317b7d545ebb">fm_eulerToMatrixDX</a>(<span class="keywordtype">float</span> <a class="code" href="bt_vector3_8h.html#0d05bb202a57e1c47ae0eeeec2502c1b" title="Return the x value.">x</a>,<span class="keywordtype">float</span> <a class="code" href="bt_vector3_8h.html#88617d2888b444b2ad2384b17b0eeadf" title="Return the y value.">y</a>,<span class="keywordtype">float</span> <a class="code" href="bt_vector3_8h.html#49dd8d4770be4de32dd57f9b926aa396" title="Return the z value.">z</a>,<span class="keywordtype">float</span> matrix[16]); <span class="comment">// convert euler angles to quaternion using the fucked up DirectX method.</span>
<a name="l00107"></a>00107 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#c80feefbeefd17402f51317b7d545ebb">fm_eulerToMatrixDX</a>(<span class="keywordtype">double</span> <a class="code" href="bt_vector3_8h.html#0d05bb202a57e1c47ae0eeeec2502c1b" title="Return the x value.">x</a>,<span class="keywordtype">double</span> <a class="code" href="bt_vector3_8h.html#88617d2888b444b2ad2384b17b0eeadf" title="Return the y value.">y</a>,<span class="keywordtype">double</span> <a class="code" href="bt_vector3_8h.html#49dd8d4770be4de32dd57f9b926aa396" title="Return the z value.">z</a>,<span class="keywordtype">double</span> matrix[16]); <span class="comment">// convert euler angles to quaternion using the fucked up DirectX method.</span>
<a name="l00108"></a>00108
<a name="l00109"></a>00109 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#b363d3868e88b3760f8295f213652242">fm_quatToMatrix</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> quat[4],<span class="keywordtype">float</span> matrix[16]); <span class="comment">// convert quaterinion rotation to matrix, translation set to zero.</span>
<a name="l00110"></a>00110 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#b363d3868e88b3760f8295f213652242">fm_quatToMatrix</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> quat[4],<span class="keywordtype">double</span> matrix[16]); <span class="comment">// convert quaterinion rotation to matrix, translation set to zero.</span>
<a name="l00111"></a>00111
<a name="l00112"></a>00112 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#b1dbaf174472d60724ab64af30e05223">fm_quatRotate</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> quat[4],<span class="keyword">const</span> <span class="keywordtype">float</span> v[3],<span class="keywordtype">float</span> r[3]); <span class="comment">// rotate a vector directly by a quaternion.</span>
<a name="l00113"></a>00113 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#b1dbaf174472d60724ab64af30e05223">fm_quatRotate</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> quat[4],<span class="keyword">const</span> <span class="keywordtype">double</span> v[3],<span class="keywordtype">double</span> r[3]); <span class="comment">// rotate a vector directly by a quaternion.</span>
<a name="l00114"></a>00114
<a name="l00115"></a>00115 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#a83944760275782e7436df8b53a0c36c">fm_getTranslation</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> matrix[16],<span class="keywordtype">float</span> t[3]);
<a name="l00116"></a>00116 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#a83944760275782e7436df8b53a0c36c">fm_getTranslation</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> matrix[16],<span class="keywordtype">double</span> t[3]);
<a name="l00117"></a>00117
<a name="l00118"></a>00118 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#9e7b6b20e5d995bbe4be9cda48f5f590">fm_setTranslation</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> *translation,<span class="keywordtype">float</span> matrix[16]);
<a name="l00119"></a>00119 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#9e7b6b20e5d995bbe4be9cda48f5f590">fm_setTranslation</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> *translation,<span class="keywordtype">double</span> matrix[16]);
<a name="l00120"></a>00120
<a name="l00121"></a>00121 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#9053918ec3894e3fb079e932fd54b647">fm_multiplyQuat</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> *qa,<span class="keyword">const</span> <span class="keywordtype">float</span> *qb,<span class="keywordtype">float</span> *quat);
<a name="l00122"></a>00122 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#9053918ec3894e3fb079e932fd54b647">fm_multiplyQuat</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> *qa,<span class="keyword">const</span> <span class="keywordtype">double</span> *qb,<span class="keywordtype">double</span> *quat);
<a name="l00123"></a>00123
<a name="l00124"></a>00124 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#672d75bf66999a3d1a6de125e85c5265">fm_matrixToQuat</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> matrix[16],<span class="keywordtype">float</span> quat[4]); <span class="comment">// convert the 3x3 portion of a 4x4 matrix into a quaterion as x,y,z,w</span>
<a name="l00125"></a>00125 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#672d75bf66999a3d1a6de125e85c5265">fm_matrixToQuat</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> matrix[16],<span class="keywordtype">double</span> quat[4]); <span class="comment">// convert the 3x3 portion of a 4x4 matrix into a quaterion as x,y,z,w</span>
<a name="l00126"></a>00126
<a name="l00127"></a>00127 <span class="keywordtype">float</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#1a34d0ebad3b1971c131e6549b06cdd0">fm_sphereVolume</a>(<span class="keywordtype">float</span> radius); <span class="comment">// return's the volume of a sphere of this radius (4/3 PI * R cubed )</span>
<a name="l00128"></a>00128 <span class="keywordtype">double</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#1a34d0ebad3b1971c131e6549b06cdd0">fm_sphereVolume</a>(<span class="keywordtype">double</span> radius); <span class="comment">// return's the volume of a sphere of this radius (4/3 PI * R cubed )</span>
<a name="l00129"></a>00129
<a name="l00130"></a>00130 <span class="keywordtype">float</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#243023211b7a4e5ab60bdb10c4a9db0f">fm_cylinderVolume</a>(<span class="keywordtype">float</span> radius,<span class="keywordtype">float</span> h);
<a name="l00131"></a>00131 <span class="keywordtype">double</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#243023211b7a4e5ab60bdb10c4a9db0f">fm_cylinderVolume</a>(<span class="keywordtype">double</span> radius,<span class="keywordtype">double</span> h);
<a name="l00132"></a>00132
<a name="l00133"></a>00133 <span class="keywordtype">float</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#890be2a1715cda687e5d3e63d5f59e56">fm_capsuleVolume</a>(<span class="keywordtype">float</span> radius,<span class="keywordtype">float</span> h);
<a name="l00134"></a>00134 <span class="keywordtype">double</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#890be2a1715cda687e5d3e63d5f59e56">fm_capsuleVolume</a>(<span class="keywordtype">double</span> radius,<span class="keywordtype">double</span> h);
<a name="l00135"></a>00135
<a name="l00136"></a>00136 <span class="keywordtype">float</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#bcb99669f70be380f66d9a1fde599fab">fm_distance</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p2[3]);
<a name="l00137"></a>00137 <span class="keywordtype">double</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#bcb99669f70be380f66d9a1fde599fab">fm_distance</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">double</span> p2[3]);
<a name="l00138"></a>00138
<a name="l00139"></a>00139 <span class="keywordtype">float</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#1721515731405ff0444d53ce4a0ab227">fm_distanceSquared</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p2[3]);
<a name="l00140"></a>00140 <span class="keywordtype">double</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#1721515731405ff0444d53ce4a0ab227">fm_distanceSquared</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">double</span> p2[3]);
<a name="l00141"></a>00141
<a name="l00142"></a>00142 <span class="keywordtype">float</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#2ef966a4f85a8067ed36c020e036b401">fm_distanceSquaredXZ</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p2[3]);
<a name="l00143"></a>00143 <span class="keywordtype">double</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#2ef966a4f85a8067ed36c020e036b401">fm_distanceSquaredXZ</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">double</span> p2[3]);
<a name="l00144"></a>00144
<a name="l00145"></a>00145 <span class="keywordtype">float</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#e16f6af28acc944aa4307b55208ef0ce">fm_computePlane</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p2[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p3[3],<span class="keywordtype">float</span> *n); <span class="comment">// return D</span>
<a name="l00146"></a>00146 <span class="keywordtype">double</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#e16f6af28acc944aa4307b55208ef0ce">fm_computePlane</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">double</span> p2[3],<span class="keyword">const</span> <span class="keywordtype">double</span> p3[3],<span class="keywordtype">double</span> *n); <span class="comment">// return D</span>
<a name="l00147"></a>00147
<a name="l00148"></a>00148 <span class="keywordtype">float</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#f91f007d37b043bd7e70b4d2de1fbd25">fm_distToPlane</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> plane[4],<span class="keyword">const</span> <span class="keywordtype">float</span> pos[3]); <span class="comment">// computes the distance of this point from the plane.</span>
<a name="l00149"></a>00149 <span class="keywordtype">double</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#f91f007d37b043bd7e70b4d2de1fbd25">fm_distToPlane</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> plane[4],<span class="keyword">const</span> <span class="keywordtype">double</span> pos[3]); <span class="comment">// computes the distance of this point from the plane.</span>
<a name="l00150"></a>00150
<a name="l00151"></a>00151 <span class="keywordtype">float</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#194f9efd2bb057b2209327630dec652e">fm_dot</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p2[3]);
<a name="l00152"></a>00152 <span class="keywordtype">double</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#194f9efd2bb057b2209327630dec652e">fm_dot</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">double</span> p2[3]);
<a name="l00153"></a>00153
<a name="l00154"></a>00154 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#8646830ccfdaad8014442e1e502e85bc">fm_cross</a>(<span class="keywordtype">float</span> <a class="code" href="bt_vector3_8h.html#be07352e9e8ada8dda9ead8a0c9c20d0" title="Return the cross product between this and another vector.">cross</a>[3],<span class="keyword">const</span> <span class="keywordtype">float</span> a[3],<span class="keyword">const</span> <span class="keywordtype">float</span> b[3]);
<a name="l00155"></a>00155 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#8646830ccfdaad8014442e1e502e85bc">fm_cross</a>(<span class="keywordtype">double</span> <a class="code" href="bt_vector3_8h.html#be07352e9e8ada8dda9ead8a0c9c20d0" title="Return the cross product between this and another vector.">cross</a>[3],<span class="keyword">const</span> <span class="keywordtype">double</span> a[3],<span class="keyword">const</span> <span class="keywordtype">double</span> b[3]);
<a name="l00156"></a>00156
<a name="l00157"></a>00157 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#bedf4d35d4d7f1cd6f5ef3ce30b99169">fm_computeNormalVector</a>(<span class="keywordtype">float</span> n[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p2[3]); <span class="comment">// as P2-P1 normalized.</span>
<a name="l00158"></a>00158 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#bedf4d35d4d7f1cd6f5ef3ce30b99169">fm_computeNormalVector</a>(<span class="keywordtype">double</span> n[3],<span class="keyword">const</span> <span class="keywordtype">double</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">double</span> p2[3]); <span class="comment">// as P2-P1 normalized.</span>
<a name="l00159"></a>00159
<a name="l00160"></a>00160 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#a44a0e6887abf9d22e27e79f38cf0b7c">fm_computeWindingOrder</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p2[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p3[3]); <span class="comment">// returns true if the triangle is clockwise.</span>
<a name="l00161"></a>00161 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#a44a0e6887abf9d22e27e79f38cf0b7c">fm_computeWindingOrder</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">double</span> p2[3],<span class="keyword">const</span> <span class="keywordtype">double</span> p3[3]); <span class="comment">// returns true if the triangle is clockwise.</span>
<a name="l00162"></a>00162
<a name="l00163"></a>00163 <span class="keywordtype">float</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#fe19fb5409155a1b100555ae8b27e042">fm_normalize</a>(<span class="keywordtype">float</span> n[3]); <span class="comment">// normalize this vector and return the distance</span>
<a name="l00164"></a>00164 <span class="keywordtype">double</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#fe19fb5409155a1b100555ae8b27e042">fm_normalize</a>(<span class="keywordtype">double</span> n[3]); <span class="comment">// normalize this vector and return the distance</span>
<a name="l00165"></a>00165
<a name="l00166"></a>00166 <span class="keywordtype">float</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#ff088a0e1dfb0fc72cd8e890b5ae39a2">fm_normalizeQuat</a>(<span class="keywordtype">float</span> n[4]); <span class="comment">// normalize this quat</span>
<a name="l00167"></a>00167 <span class="keywordtype">double</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#ff088a0e1dfb0fc72cd8e890b5ae39a2">fm_normalizeQuat</a>(<span class="keywordtype">double</span> n[4]); <span class="comment">// normalize this quat</span>
<a name="l00168"></a>00168
<a name="l00169"></a>00169 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#38037bcca3e6efebe64714e1fa93a253">fm_matrixMultiply</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> A[16],<span class="keyword">const</span> <span class="keywordtype">float</span> B[16],<span class="keywordtype">float</span> dest[16]);
<a name="l00170"></a>00170 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#38037bcca3e6efebe64714e1fa93a253">fm_matrixMultiply</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> A[16],<span class="keyword">const</span> <span class="keywordtype">double</span> B[16],<span class="keywordtype">double</span> dest[16]);
<a name="l00171"></a>00171
<a name="l00172"></a>00172 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#cb3c8d61dfb35df6685ace736d7c61af">fm_composeTransform</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> position[3],<span class="keyword">const</span> <span class="keywordtype">float</span> quat[4],<span class="keyword">const</span> <span class="keywordtype">float</span> scale[3],<span class="keywordtype">float</span> matrix[16]);
<a name="l00173"></a>00173 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#cb3c8d61dfb35df6685ace736d7c61af">fm_composeTransform</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> position[3],<span class="keyword">const</span> <span class="keywordtype">double</span> quat[4],<span class="keyword">const</span> <span class="keywordtype">double</span> scale[3],<span class="keywordtype">double</span> matrix[16]);
<a name="l00174"></a>00174
<a name="l00175"></a>00175 <span class="keywordtype">float</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#62f6d3e26092170ccc5c90ffdbeffd8e">fm_computeArea</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p2[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p3[3]);
<a name="l00176"></a>00176 <span class="keywordtype">double</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#62f6d3e26092170ccc5c90ffdbeffd8e">fm_computeArea</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">double</span> p2[3],<span class="keyword">const</span> <span class="keywordtype">double</span> p3[3]);
<a name="l00177"></a>00177
<a name="l00178"></a>00178 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#9621fb749969501979e6db6cf2decb58">fm_lerp</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p2[3],<span class="keywordtype">float</span> dest[3],<span class="keywordtype">float</span> lerpValue);
<a name="l00179"></a>00179 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#9621fb749969501979e6db6cf2decb58">fm_lerp</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">double</span> p2[3],<span class="keywordtype">double</span> dest[3],<span class="keywordtype">double</span> lerpValue);
<a name="l00180"></a>00180
<a name="l00181"></a>00181 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#2ca4cef6af901b8de71c71535369229e">fm_insideTriangleXZ</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> test[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p2[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p3[3]);
<a name="l00182"></a>00182 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#2ca4cef6af901b8de71c71535369229e">fm_insideTriangleXZ</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> test[3],<span class="keyword">const</span> <span class="keywordtype">double</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">double</span> p2[3],<span class="keyword">const</span> <span class="keywordtype">double</span> p3[3]);
<a name="l00183"></a>00183
<a name="l00184"></a>00184 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#45c52a87f81bba0ed935d83ff9582de1">fm_insideAABB</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> pos[3],<span class="keyword">const</span> <span class="keywordtype">float</span> bmin[3],<span class="keyword">const</span> <span class="keywordtype">float</span> bmax[3]);
<a name="l00185"></a>00185 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#45c52a87f81bba0ed935d83ff9582de1">fm_insideAABB</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> pos[3],<span class="keyword">const</span> <span class="keywordtype">double</span> bmin[3],<span class="keyword">const</span> <span class="keywordtype">double</span> bmax[3]);
<a name="l00186"></a>00186
<a name="l00187"></a>00187 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#45c52a87f81bba0ed935d83ff9582de1">fm_insideAABB</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> obmin[3],<span class="keyword">const</span> <span class="keywordtype">float</span> obmax[3],<span class="keyword">const</span> <span class="keywordtype">float</span> tbmin[3],<span class="keyword">const</span> <span class="keywordtype">float</span> tbmax[3]); <span class="comment">// test if bounding box tbmin/tmbax is fully inside obmin/obmax</span>
<a name="l00188"></a>00188 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#45c52a87f81bba0ed935d83ff9582de1">fm_insideAABB</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> obmin[3],<span class="keyword">const</span> <span class="keywordtype">double</span> obmax[3],<span class="keyword">const</span> <span class="keywordtype">double</span> tbmin[3],<span class="keyword">const</span> <span class="keywordtype">double</span> tbmax[3]); <span class="comment">// test if bounding box tbmin/tmbax is fully inside obmin/obmax</span>
<a name="l00189"></a>00189
<a name="l00190"></a>00190 uint32_t <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#3fb4f3f21c789ffc5369154820c30472">fm_clipTestPoint</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> bmin[3],<span class="keyword">const</span> <span class="keywordtype">float</span> bmax[3],<span class="keyword">const</span> <span class="keywordtype">float</span> pos[3]);
<a name="l00191"></a>00191 uint32_t <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#3fb4f3f21c789ffc5369154820c30472">fm_clipTestPoint</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> bmin[3],<span class="keyword">const</span> <span class="keywordtype">double</span> bmax[3],<span class="keyword">const</span> <span class="keywordtype">double</span> pos[3]);
<a name="l00192"></a>00192
<a name="l00193"></a>00193 uint32_t <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#955f588e9f1c54ae05b315c5c1b57c29">fm_clipTestPointXZ</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> bmin[3],<span class="keyword">const</span> <span class="keywordtype">float</span> bmax[3],<span class="keyword">const</span> <span class="keywordtype">float</span> pos[3]); <span class="comment">// only tests X and Z, not Y</span>
<a name="l00194"></a>00194 uint32_t <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#955f588e9f1c54ae05b315c5c1b57c29">fm_clipTestPointXZ</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> bmin[3],<span class="keyword">const</span> <span class="keywordtype">double</span> bmax[3],<span class="keyword">const</span> <span class="keywordtype">double</span> pos[3]); <span class="comment">// only tests X and Z, not Y</span>
<a name="l00195"></a>00195
<a name="l00196"></a>00196
<a name="l00197"></a>00197 uint32_t <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#f49bf6eedc01255120d2c91f04ccffcc">fm_clipTestAABB</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> bmin[3],<span class="keyword">const</span> <span class="keywordtype">float</span> bmax[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p2[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p3[3],uint32_t &andCode);
<a name="l00198"></a>00198 uint32_t <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#f49bf6eedc01255120d2c91f04ccffcc">fm_clipTestAABB</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> bmin[3],<span class="keyword">const</span> <span class="keywordtype">double</span> bmax[3],<span class="keyword">const</span> <span class="keywordtype">double</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">double</span> p2[3],<span class="keyword">const</span> <span class="keywordtype">double</span> p3[3],uint32_t &andCode);
<a name="l00199"></a>00199
<a name="l00200"></a>00200
<a name="l00201"></a>00201 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#e54daa385d845bcb2e27dfd0340bb920">fm_lineTestAABBXZ</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p2[3],<span class="keyword">const</span> <span class="keywordtype">float</span> bmin[3],<span class="keyword">const</span> <span class="keywordtype">float</span> bmax[3],<span class="keywordtype">float</span> &time);
<a name="l00202"></a>00202 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#e54daa385d845bcb2e27dfd0340bb920">fm_lineTestAABBXZ</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">double</span> p2[3],<span class="keyword">const</span> <span class="keywordtype">double</span> bmin[3],<span class="keyword">const</span> <span class="keywordtype">double</span> bmax[3],<span class="keywordtype">double</span> &time);
<a name="l00203"></a>00203
<a name="l00204"></a>00204 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#fb8afe3f925d308fc0d8d3e6e99e521f">fm_lineTestAABB</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p2[3],<span class="keyword">const</span> <span class="keywordtype">float</span> bmin[3],<span class="keyword">const</span> <span class="keywordtype">float</span> bmax[3],<span class="keywordtype">float</span> &time);
<a name="l00205"></a>00205 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#fb8afe3f925d308fc0d8d3e6e99e521f">fm_lineTestAABB</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">double</span> p2[3],<span class="keyword">const</span> <span class="keywordtype">double</span> bmin[3],<span class="keyword">const</span> <span class="keywordtype">double</span> bmax[3],<span class="keywordtype">double</span> &time);
<a name="l00206"></a>00206
<a name="l00207"></a>00207
<a name="l00208"></a>00208 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#50cc16fc96ce2d7866715bfa65ce977c">fm_initMinMax</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> p[3],<span class="keywordtype">float</span> bmin[3],<span class="keywordtype">float</span> bmax[3]);
<a name="l00209"></a>00209 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#50cc16fc96ce2d7866715bfa65ce977c">fm_initMinMax</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> p[3],<span class="keywordtype">double</span> bmin[3],<span class="keywordtype">double</span> bmax[3]);
<a name="l00210"></a>00210
<a name="l00211"></a>00211 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#50cc16fc96ce2d7866715bfa65ce977c">fm_initMinMax</a>(<span class="keywordtype">float</span> bmin[3],<span class="keywordtype">float</span> bmax[3]);
<a name="l00212"></a>00212 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#50cc16fc96ce2d7866715bfa65ce977c">fm_initMinMax</a>(<span class="keywordtype">double</span> bmin[3],<span class="keywordtype">double</span> bmax[3]);
<a name="l00213"></a>00213
<a name="l00214"></a>00214 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#696d64ea8806b47c3f9a7a015ba0e304">fm_minmax</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> p[3],<span class="keywordtype">float</span> bmin[3],<span class="keywordtype">float</span> bmax[3]); <span class="comment">// accumulate to a min-max value</span>
<a name="l00215"></a>00215 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#696d64ea8806b47c3f9a7a015ba0e304">fm_minmax</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> p[3],<span class="keywordtype">double</span> bmin[3],<span class="keywordtype">double</span> bmax[3]); <span class="comment">// accumulate to a min-max value</span>
<a name="l00216"></a>00216
<a name="l00217"></a>00217 <span class="comment">// Computes the diagonal length of the bounding box and then inflates the bounding box on all sides</span>
<a name="l00218"></a>00218 <span class="comment">// by the ratio provided.</span>
<a name="l00219"></a>00219 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#cbd7a02b1c968f46338a96cf6d2bf9a7">fm_inflateMinMax</a>(<span class="keywordtype">float</span> bmin[3], <span class="keywordtype">float</span> bmax[3], <span class="keywordtype">float</span> ratio);
<a name="l00220"></a>00220 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#cbd7a02b1c968f46338a96cf6d2bf9a7">fm_inflateMinMax</a>(<span class="keywordtype">double</span> bmin[3], <span class="keywordtype">double</span> bmax[3], <span class="keywordtype">double</span> ratio);
<a name="l00221"></a>00221
<a name="l00222"></a>00222 <span class="keywordtype">float</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#8946aab872f6d90d17b51685fd3b7c1b">fm_solveX</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> plane[4],<span class="keywordtype">float</span> <a class="code" href="bt_vector3_8h.html#88617d2888b444b2ad2384b17b0eeadf" title="Return the y value.">y</a>,<span class="keywordtype">float</span> <a class="code" href="bt_vector3_8h.html#49dd8d4770be4de32dd57f9b926aa396" title="Return the z value.">z</a>); <span class="comment">// solve for X given this plane equation and the other two components.</span>
<a name="l00223"></a>00223 <span class="keywordtype">double</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#8946aab872f6d90d17b51685fd3b7c1b">fm_solveX</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> plane[4],<span class="keywordtype">double</span> <a class="code" href="bt_vector3_8h.html#88617d2888b444b2ad2384b17b0eeadf" title="Return the y value.">y</a>,<span class="keywordtype">double</span> <a class="code" href="bt_vector3_8h.html#49dd8d4770be4de32dd57f9b926aa396" title="Return the z value.">z</a>); <span class="comment">// solve for X given this plane equation and the other two components.</span>
<a name="l00224"></a>00224
<a name="l00225"></a>00225 <span class="keywordtype">float</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#2fd9365eecfffd704a661d8e4975ad4d">fm_solveY</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> plane[4],<span class="keywordtype">float</span> <a class="code" href="bt_vector3_8h.html#0d05bb202a57e1c47ae0eeeec2502c1b" title="Return the x value.">x</a>,<span class="keywordtype">float</span> <a class="code" href="bt_vector3_8h.html#49dd8d4770be4de32dd57f9b926aa396" title="Return the z value.">z</a>); <span class="comment">// solve for Y given this plane equation and the other two components.</span>
<a name="l00226"></a>00226 <span class="keywordtype">double</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#2fd9365eecfffd704a661d8e4975ad4d">fm_solveY</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> plane[4],<span class="keywordtype">double</span> <a class="code" href="bt_vector3_8h.html#0d05bb202a57e1c47ae0eeeec2502c1b" title="Return the x value.">x</a>,<span class="keywordtype">double</span> <a class="code" href="bt_vector3_8h.html#49dd8d4770be4de32dd57f9b926aa396" title="Return the z value.">z</a>); <span class="comment">// solve for Y given this plane equation and the other two components.</span>
<a name="l00227"></a>00227
<a name="l00228"></a>00228 <span class="keywordtype">float</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#0c57a6810cb46d53c66807a83f24b7f8">fm_solveZ</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> plane[4],<span class="keywordtype">float</span> <a class="code" href="bt_vector3_8h.html#0d05bb202a57e1c47ae0eeeec2502c1b" title="Return the x value.">x</a>,<span class="keywordtype">float</span> <a class="code" href="bt_vector3_8h.html#88617d2888b444b2ad2384b17b0eeadf" title="Return the y value.">y</a>); <span class="comment">// solve for Z given this plane equation and the other two components.</span>
<a name="l00229"></a>00229 <span class="keywordtype">double</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#0c57a6810cb46d53c66807a83f24b7f8">fm_solveZ</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> plane[4],<span class="keywordtype">double</span> <a class="code" href="bt_vector3_8h.html#0d05bb202a57e1c47ae0eeeec2502c1b" title="Return the x value.">x</a>,<span class="keywordtype">double</span> <a class="code" href="bt_vector3_8h.html#88617d2888b444b2ad2384b17b0eeadf" title="Return the y value.">y</a>); <span class="comment">// solve for Z given this plane equation and the other two components.</span>
<a name="l00230"></a>00230
<a name="l00231"></a>00231 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#9a5fc6e07fe7bd2a6794df97c94ea32e">fm_computeBestFitPlane</a>(uint32_t vcount, <span class="comment">// number of input data points</span>
<a name="l00232"></a>00232 <span class="keyword">const</span> <span class="keywordtype">float</span> *points, <span class="comment">// starting address of points array.</span>
<a name="l00233"></a>00233 uint32_t vstride, <span class="comment">// stride between input points.</span>
<a name="l00234"></a>00234 <span class="keyword">const</span> <span class="keywordtype">float</span> *weights, <span class="comment">// *optional point weighting values.</span>
<a name="l00235"></a>00235 uint32_t wstride, <span class="comment">// weight stride for each vertex.</span>
<a name="l00236"></a>00236 <span class="keywordtype">float</span> plane[4]);
<a name="l00237"></a>00237
<a name="l00238"></a>00238 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#9a5fc6e07fe7bd2a6794df97c94ea32e">fm_computeBestFitPlane</a>(uint32_t vcount, <span class="comment">// number of input data points</span>
<a name="l00239"></a>00239 <span class="keyword">const</span> <span class="keywordtype">double</span> *points, <span class="comment">// starting address of points array.</span>
<a name="l00240"></a>00240 uint32_t vstride, <span class="comment">// stride between input points.</span>
<a name="l00241"></a>00241 <span class="keyword">const</span> <span class="keywordtype">double</span> *weights, <span class="comment">// *optional point weighting values.</span>
<a name="l00242"></a>00242 uint32_t wstride, <span class="comment">// weight stride for each vertex.</span>
<a name="l00243"></a>00243 <span class="keywordtype">double</span> plane[4]);
<a name="l00244"></a>00244
<a name="l00245"></a>00245 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#18df4ec9f73845649b49c9a984f6c52e">fm_computeCentroid</a>(uint32_t vcount, <span class="comment">// number of input data points</span>
<a name="l00246"></a>00246 <span class="keyword">const</span> <span class="keywordtype">float</span> *points, <span class="comment">// starting address of points array.</span>
<a name="l00247"></a>00247 uint32_t vstride, <span class="comment">// stride between input points.</span>
<a name="l00248"></a>00248 <span class="keywordtype">float</span> *center);
<a name="l00249"></a>00249
<a name="l00250"></a>00250 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#18df4ec9f73845649b49c9a984f6c52e">fm_computeCentroid</a>(uint32_t vcount, <span class="comment">// number of input data points</span>
<a name="l00251"></a>00251 <span class="keyword">const</span> <span class="keywordtype">double</span> *points, <span class="comment">// starting address of points array.</span>
<a name="l00252"></a>00252 uint32_t vstride, <span class="comment">// stride between input points.</span>
<a name="l00253"></a>00253 <span class="keywordtype">double</span> *center);
<a name="l00254"></a>00254
<a name="l00255"></a>00255
<a name="l00256"></a>00256 <span class="keywordtype">float</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#d449806042368d819f7e5e3e05b390a0">fm_computeBestFitAABB</a>(uint32_t vcount,<span class="keyword">const</span> <span class="keywordtype">float</span> *points,uint32_t pstride,<span class="keywordtype">float</span> bmin[3],<span class="keywordtype">float</span> bmax[3]); <span class="comment">// returns the diagonal distance</span>
<a name="l00257"></a>00257 <span class="keywordtype">double</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#d449806042368d819f7e5e3e05b390a0">fm_computeBestFitAABB</a>(uint32_t vcount,<span class="keyword">const</span> <span class="keywordtype">double</span> *points,uint32_t pstride,<span class="keywordtype">double</span> bmin[3],<span class="keywordtype">double</span> bmax[3]); <span class="comment">// returns the diagonal distance</span>
<a name="l00258"></a>00258
<a name="l00259"></a>00259 <span class="keywordtype">float</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#121beb08ccdf7b92b405f3a7fee2e1d1">fm_computeBestFitSphere</a>(uint32_t vcount,<span class="keyword">const</span> <span class="keywordtype">float</span> *points,uint32_t pstride,<span class="keywordtype">float</span> center[3]);
<a name="l00260"></a>00260 <span class="keywordtype">double</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#121beb08ccdf7b92b405f3a7fee2e1d1">fm_computeBestFitSphere</a>(uint32_t vcount,<span class="keyword">const</span> <span class="keywordtype">double</span> *points,uint32_t pstride,<span class="keywordtype">double</span> center[3]);
<a name="l00261"></a>00261
<a name="l00262"></a>00262 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#add3751eaa131cd3fd3007c456a1be1b">fm_lineSphereIntersect</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> center[3],<span class="keywordtype">float</span> radius,<span class="keyword">const</span> <span class="keywordtype">float</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p2[3],<span class="keywordtype">float</span> intersect[3]);
<a name="l00263"></a>00263 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#add3751eaa131cd3fd3007c456a1be1b">fm_lineSphereIntersect</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> center[3],<span class="keywordtype">double</span> radius,<span class="keyword">const</span> <span class="keywordtype">double</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">double</span> p2[3],<span class="keywordtype">double</span> intersect[3]);
<a name="l00264"></a>00264
<a name="l00265"></a>00265 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#80e7d3a77fae86473625be5a63425d90">fm_intersectRayAABB</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> bmin[3],<span class="keyword">const</span> <span class="keywordtype">float</span> bmax[3],<span class="keyword">const</span> <span class="keywordtype">float</span> pos[3],<span class="keyword">const</span> <span class="keywordtype">float</span> dir[3],<span class="keywordtype">float</span> intersect[3]);
<a name="l00266"></a>00266 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#72afa3a5fc5c9cf16835bd0bee3d890d">fm_intersectLineSegmentAABB</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> bmin[3],<span class="keyword">const</span> <span class="keywordtype">float</span> bmax[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p2[3],<span class="keywordtype">float</span> intersect[3]);
<a name="l00267"></a>00267
<a name="l00268"></a>00268 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#6b725c6d345f76e759f091e528250c6c">fm_lineIntersectsTriangle</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> rayStart[3],<span class="keyword">const</span> <span class="keywordtype">float</span> rayEnd[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p2[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p3[3],<span class="keywordtype">float</span> sect[3]);
<a name="l00269"></a>00269 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#6b725c6d345f76e759f091e528250c6c">fm_lineIntersectsTriangle</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> rayStart[3],<span class="keyword">const</span> <span class="keywordtype">double</span> rayEnd[3],<span class="keyword">const</span> <span class="keywordtype">double</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">double</span> p2[3],<span class="keyword">const</span> <span class="keywordtype">double</span> p3[3],<span class="keywordtype">double</span> sect[3]);
<a name="l00270"></a>00270
<a name="l00271"></a>00271 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#a70a27c3d146e66e393606b4c48fc37a">fm_rayIntersectsTriangle</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> origin[3],<span class="keyword">const</span> <span class="keywordtype">float</span> dir[3],<span class="keyword">const</span> <span class="keywordtype">float</span> v0[3],<span class="keyword">const</span> <span class="keywordtype">float</span> v1[3],<span class="keyword">const</span> <span class="keywordtype">float</span> v2[3],<span class="keywordtype">float</span> &t);
<a name="l00272"></a>00272 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#a70a27c3d146e66e393606b4c48fc37a">fm_rayIntersectsTriangle</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> origin[3],<span class="keyword">const</span> <span class="keywordtype">double</span> dir[3],<span class="keyword">const</span> <span class="keywordtype">double</span> v0[3],<span class="keyword">const</span> <span class="keywordtype">double</span> v1[3],<span class="keyword">const</span> <span class="keywordtype">double</span> v2[3],<span class="keywordtype">double</span> &t);
<a name="l00273"></a>00273
<a name="l00274"></a>00274 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#a1ca791e15419dff5d3ee0948b090219">fm_raySphereIntersect</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> center[3],<span class="keywordtype">float</span> radius,<span class="keyword">const</span> <span class="keywordtype">float</span> pos[3],<span class="keyword">const</span> <span class="keywordtype">float</span> dir[3],<span class="keywordtype">float</span> <a class="code" href="bt_vector3_8h.html#b699912662dfd1bd647fe45513a04792" title="Return the distance between the ends of this and another vector This is symantically...">distance</a>,<span class="keywordtype">float</span> intersect[3]);
<a name="l00275"></a>00275 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#a1ca791e15419dff5d3ee0948b090219">fm_raySphereIntersect</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> center[3],<span class="keywordtype">double</span> radius,<span class="keyword">const</span> <span class="keywordtype">double</span> pos[3],<span class="keyword">const</span> <span class="keywordtype">double</span> dir[3],<span class="keywordtype">double</span> <a class="code" href="bt_vector3_8h.html#b699912662dfd1bd647fe45513a04792" title="Return the distance between the ends of this and another vector This is symantically...">distance</a>,<span class="keywordtype">double</span> intersect[3]);
<a name="l00276"></a>00276
<a name="l00277"></a>00277 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#010b32a67e0a6823c0f48c6ff9d37fb2">fm_catmullRom</a>(<span class="keywordtype">float</span> out_vector[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p2[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p3[3],<span class="keyword">const</span> <span class="keywordtype">float</span> *p4, <span class="keyword">const</span> <span class="keywordtype">float</span> s);
<a name="l00278"></a>00278 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#010b32a67e0a6823c0f48c6ff9d37fb2">fm_catmullRom</a>(<span class="keywordtype">double</span> out_vector[3],<span class="keyword">const</span> <span class="keywordtype">double</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">double</span> p2[3],<span class="keyword">const</span> <span class="keywordtype">double</span> p3[3],<span class="keyword">const</span> <span class="keywordtype">double</span> *p4, <span class="keyword">const</span> <span class="keywordtype">double</span> s);
<a name="l00279"></a>00279
<a name="l00280"></a>00280 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#bc2bf48dcc098618366fa76bf0c2a75a">fm_intersectAABB</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> bmin1[3],<span class="keyword">const</span> <span class="keywordtype">float</span> bmax1[3],<span class="keyword">const</span> <span class="keywordtype">float</span> bmin2[3],<span class="keyword">const</span> <span class="keywordtype">float</span> bmax2[3]);
<a name="l00281"></a>00281 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#bc2bf48dcc098618366fa76bf0c2a75a">fm_intersectAABB</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> bmin1[3],<span class="keyword">const</span> <span class="keywordtype">double</span> bmax1[3],<span class="keyword">const</span> <span class="keywordtype">double</span> bmin2[3],<span class="keyword">const</span> <span class="keywordtype">double</span> bmax2[3]);
<a name="l00282"></a>00282
<a name="l00283"></a>00283
<a name="l00284"></a>00284 <span class="comment">// computes the rotation quaternion to go from unit-vector v0 to unit-vector v1</span>
<a name="l00285"></a>00285 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#44b109dcdaf358908f56f4d388642f58">fm_rotationArc</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> v0[3],<span class="keyword">const</span> <span class="keywordtype">float</span> v1[3],<span class="keywordtype">float</span> quat[4]);
<a name="l00286"></a>00286 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#44b109dcdaf358908f56f4d388642f58">fm_rotationArc</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> v0[3],<span class="keyword">const</span> <span class="keywordtype">double</span> v1[3],<span class="keywordtype">double</span> quat[4]);
<a name="l00287"></a>00287
<a name="l00288"></a>00288 <span class="keywordtype">float</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#7a4c8c9a53e6eabd8c92860358eac481">fm_distancePointLineSegment</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> Point[3],<span class="keyword">const</span> <span class="keywordtype">float</span> LineStart[3],<span class="keyword">const</span> <span class="keywordtype">float</span> LineEnd[3],<span class="keywordtype">float</span> intersection[3],<a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#122981f0e26b79857ccec1d29e24bfe9">LineSegmentType</a> &type,<span class="keywordtype">float</span> epsilon);
<a name="l00289"></a>00289 <span class="keywordtype">double</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#7a4c8c9a53e6eabd8c92860358eac481">fm_distancePointLineSegment</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> Point[3],<span class="keyword">const</span> <span class="keywordtype">double</span> LineStart[3],<span class="keyword">const</span> <span class="keywordtype">double</span> LineEnd[3],<span class="keywordtype">double</span> intersection[3],<a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#122981f0e26b79857ccec1d29e24bfe9">LineSegmentType</a> &type,<span class="keywordtype">double</span> epsilon);
<a name="l00290"></a>00290
<a name="l00291"></a>00291
<a name="l00292"></a>00292 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#2ffeeea97b9e77a30c72ce0e9b4e3896">fm_colinear</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">double</span> p2[3],<span class="keyword">const</span> <span class="keywordtype">double</span> p3[3],<span class="keywordtype">double</span> epsilon=0.999); <span class="comment">// true if these three points in a row are co-linear</span>
<a name="l00293"></a>00293 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#2ffeeea97b9e77a30c72ce0e9b4e3896">fm_colinear</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p2[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p3[3],<span class="keywordtype">float</span> epsilon=0.999f);
<a name="l00294"></a>00294
<a name="l00295"></a>00295 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#2ffeeea97b9e77a30c72ce0e9b4e3896">fm_colinear</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> a1[3],<span class="keyword">const</span> <span class="keywordtype">float</span> a2[3],<span class="keyword">const</span> <span class="keywordtype">float</span> b1[3],<span class="keyword">const</span> <span class="keywordtype">float</span> b2[3],<span class="keywordtype">float</span> epsilon=0.999f); <span class="comment">// true if these two line segments are co-linear.</span>
<a name="l00296"></a>00296 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#2ffeeea97b9e77a30c72ce0e9b4e3896">fm_colinear</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> a1[3],<span class="keyword">const</span> <span class="keywordtype">double</span> a2[3],<span class="keyword">const</span> <span class="keywordtype">double</span> b1[3],<span class="keyword">const</span> <span class="keywordtype">double</span> b2[3],<span class="keywordtype">double</span> epsilon=0.999); <span class="comment">// true if these two line segments are co-linear.</span>
<a name="l00297"></a>00297
<a name="l00298"></a><a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#4ec9f934edc5eccb0bc0cdfce58f4441">00298</a> <span class="keyword">enum</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#4ec9f934edc5eccb0bc0cdfce58f4441">IntersectResult</a>
<a name="l00299"></a>00299 {
<a name="l00300"></a><a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#4ec9f934edc5eccb0bc0cdfce58f4441982692d82fda113c3844e3d5cd7737e7">00300</a> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#4ec9f934edc5eccb0bc0cdfce58f4441982692d82fda113c3844e3d5cd7737e7">IR_DONT_INTERSECT</a>,
<a name="l00301"></a><a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#4ec9f934edc5eccb0bc0cdfce58f4441c65d828299272a2173a708a08a6a9ecf">00301</a> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#4ec9f934edc5eccb0bc0cdfce58f4441c65d828299272a2173a708a08a6a9ecf">IR_DO_INTERSECT</a>,
<a name="l00302"></a><a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#4ec9f934edc5eccb0bc0cdfce58f4441e3934decbf14b762bf1fb688a8bf888e">00302</a> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#4ec9f934edc5eccb0bc0cdfce58f4441e3934decbf14b762bf1fb688a8bf888e">IR_COINCIDENT</a>,
<a name="l00303"></a><a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#4ec9f934edc5eccb0bc0cdfce58f4441e4e33ac5bb9efd259e1804e12fb4df7f">00303</a> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#4ec9f934edc5eccb0bc0cdfce58f4441e4e33ac5bb9efd259e1804e12fb4df7f">IR_PARALLEL</a>,
<a name="l00304"></a>00304 };
<a name="l00305"></a>00305
<a name="l00306"></a>00306 <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#4ec9f934edc5eccb0bc0cdfce58f4441">IntersectResult</a> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#7180da587c645ab12754120132d54263">fm_intersectLineSegments2d</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> a1[3], <span class="keyword">const</span> <span class="keywordtype">float</span> a2[3], <span class="keyword">const</span> <span class="keywordtype">float</span> b1[3], <span class="keyword">const</span> <span class="keywordtype">float</span> b2[3], <span class="keywordtype">float</span> intersectionPoint[3]);
<a name="l00307"></a>00307 <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#4ec9f934edc5eccb0bc0cdfce58f4441">IntersectResult</a> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#7180da587c645ab12754120132d54263">fm_intersectLineSegments2d</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> a1[3],<span class="keyword">const</span> <span class="keywordtype">double</span> a2[3],<span class="keyword">const</span> <span class="keywordtype">double</span> b1[3],<span class="keyword">const</span> <span class="keywordtype">double</span> b2[3],<span class="keywordtype">double</span> intersectionPoint[3]);
<a name="l00308"></a>00308
<a name="l00309"></a>00309 <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#4ec9f934edc5eccb0bc0cdfce58f4441">IntersectResult</a> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#2a82702380cd9bd0469ee8663b3facdd">fm_intersectLineSegments2dTime</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> a1[3], <span class="keyword">const</span> <span class="keywordtype">float</span> a2[3], <span class="keyword">const</span> <span class="keywordtype">float</span> b1[3], <span class="keyword">const</span> <span class="keywordtype">float</span> b2[3],<span class="keywordtype">float</span> &t1,<span class="keywordtype">float</span> &t2);
<a name="l00310"></a>00310 <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#4ec9f934edc5eccb0bc0cdfce58f4441">IntersectResult</a> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#2a82702380cd9bd0469ee8663b3facdd">fm_intersectLineSegments2dTime</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> a1[3],<span class="keyword">const</span> <span class="keywordtype">double</span> a2[3],<span class="keyword">const</span> <span class="keywordtype">double</span> b1[3],<span class="keyword">const</span> <span class="keywordtype">double</span> b2[3],<span class="keywordtype">double</span> &t1,<span class="keywordtype">double</span> &t2);
<a name="l00311"></a>00311
<a name="l00312"></a>00312 <span class="comment">// Plane-Triangle splitting</span>
<a name="l00313"></a>00313
<a name="l00314"></a><a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#31893d5e8443706d3d6b889d01a9607c">00314</a> <span class="keyword">enum</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#31893d5e8443706d3d6b889d01a9607c">PlaneTriResult</a>
<a name="l00315"></a>00315 {
<a name="l00316"></a><a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#31893d5e8443706d3d6b889d01a9607cf1e58b50ed4444c0a2a0a2726395c430">00316</a> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#31893d5e8443706d3d6b889d01a9607cf1e58b50ed4444c0a2a0a2726395c430">PTR_ON_PLANE</a>,
<a name="l00317"></a><a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#31893d5e8443706d3d6b889d01a9607cb7d607fd4a4b559b23e0432b32d3ad31">00317</a> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#31893d5e8443706d3d6b889d01a9607cb7d607fd4a4b559b23e0432b32d3ad31">PTR_FRONT</a>,
<a name="l00318"></a><a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#31893d5e8443706d3d6b889d01a9607c04dee1498613f2b82ff56fb995b9df9e">00318</a> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#31893d5e8443706d3d6b889d01a9607c04dee1498613f2b82ff56fb995b9df9e">PTR_BACK</a>,
<a name="l00319"></a><a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#31893d5e8443706d3d6b889d01a9607c82a429ed76868ef18cf4919b44b48cea">00319</a> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#31893d5e8443706d3d6b889d01a9607c82a429ed76868ef18cf4919b44b48cea">PTR_SPLIT</a>,
<a name="l00320"></a>00320 };
<a name="l00321"></a>00321
<a name="l00322"></a>00322 <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#31893d5e8443706d3d6b889d01a9607c">PlaneTriResult</a> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#698eb52eed0586a33b43a9caf1faea4a">fm_planeTriIntersection</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> plane[4], <span class="comment">// the plane equation in Ax+By+Cz+D format</span>
<a name="l00323"></a>00323 <span class="keyword">const</span> <span class="keywordtype">float</span> *triangle, <span class="comment">// the source triangle.</span>
<a name="l00324"></a>00324 uint32_t tstride, <span class="comment">// stride in bytes of the input and output *vertices*</span>
<a name="l00325"></a>00325 <span class="keywordtype">float</span> epsilon, <span class="comment">// the co-planer epsilon value.</span>
<a name="l00326"></a>00326 <span class="keywordtype">float</span> *front, <span class="comment">// the triangle in front of the</span>
<a name="l00327"></a>00327 uint32_t &fcount, <span class="comment">// number of vertices in the 'front' triangle</span>
<a name="l00328"></a>00328 <span class="keywordtype">float</span> *back, <span class="comment">// the triangle in back of the plane</span>
<a name="l00329"></a>00329 uint32_t &bcount); <span class="comment">// the number of vertices in the 'back' triangle.</span>
<a name="l00330"></a>00330
<a name="l00331"></a>00331
<a name="l00332"></a>00332 <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#31893d5e8443706d3d6b889d01a9607c">PlaneTriResult</a> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#698eb52eed0586a33b43a9caf1faea4a">fm_planeTriIntersection</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> plane[4], <span class="comment">// the plane equation in Ax+By+Cz+D format</span>
<a name="l00333"></a>00333 <span class="keyword">const</span> <span class="keywordtype">double</span> *triangle, <span class="comment">// the source triangle.</span>
<a name="l00334"></a>00334 uint32_t tstride, <span class="comment">// stride in bytes of the input and output *vertices*</span>
<a name="l00335"></a>00335 <span class="keywordtype">double</span> epsilon, <span class="comment">// the co-planer epsilon value.</span>
<a name="l00336"></a>00336 <span class="keywordtype">double</span> *front, <span class="comment">// the triangle in front of the</span>
<a name="l00337"></a>00337 uint32_t &fcount, <span class="comment">// number of vertices in the 'front' triangle</span>
<a name="l00338"></a>00338 <span class="keywordtype">double</span> *back, <span class="comment">// the triangle in back of the plane</span>
<a name="l00339"></a>00339 uint32_t &bcount); <span class="comment">// the number of vertices in the 'back' triangle.</span>
<a name="l00340"></a>00340
<a name="l00341"></a>00341
<a name="l00342"></a>00342 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#5818d6dc249cc90d8ff4b8d1533b64e3">fm_intersectPointPlane</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">float</span> p2[3],<span class="keywordtype">float</span> *split,<span class="keyword">const</span> <span class="keywordtype">float</span> plane[4]);
<a name="l00343"></a>00343 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#5818d6dc249cc90d8ff4b8d1533b64e3">fm_intersectPointPlane</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> p1[3],<span class="keyword">const</span> <span class="keywordtype">double</span> p2[3],<span class="keywordtype">double</span> *split,<span class="keyword">const</span> <span class="keywordtype">double</span> plane[4]);
<a name="l00344"></a>00344
<a name="l00345"></a>00345 <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#31893d5e8443706d3d6b889d01a9607c">PlaneTriResult</a> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#cfb3009ad74719bf7240567fedd43ead">fm_getSidePlane</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> p[3],<span class="keyword">const</span> <span class="keywordtype">float</span> plane[4],<span class="keywordtype">float</span> epsilon);
<a name="l00346"></a>00346 <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#31893d5e8443706d3d6b889d01a9607c">PlaneTriResult</a> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#cfb3009ad74719bf7240567fedd43ead">fm_getSidePlane</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> p[3],<span class="keyword">const</span> <span class="keywordtype">double</span> plane[4],<span class="keywordtype">double</span> epsilon);
<a name="l00347"></a>00347
<a name="l00348"></a>00348
<a name="l00349"></a>00349 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#60e918c2ee5358ed7fd566623f18f566">fm_computeBestFitOBB</a>(uint32_t vcount,<span class="keyword">const</span> <span class="keywordtype">float</span> *points,uint32_t pstride,<span class="keywordtype">float</span> *sides,<span class="keywordtype">float</span> matrix[16],<span class="keywordtype">bool</span> bruteForce=<span class="keyword">true</span>);
<a name="l00350"></a>00350 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#60e918c2ee5358ed7fd566623f18f566">fm_computeBestFitOBB</a>(uint32_t vcount,<span class="keyword">const</span> <span class="keywordtype">double</span> *points,uint32_t pstride,<span class="keywordtype">double</span> *sides,<span class="keywordtype">double</span> matrix[16],<span class="keywordtype">bool</span> bruteForce=<span class="keyword">true</span>);
<a name="l00351"></a>00351
<a name="l00352"></a>00352 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#60e918c2ee5358ed7fd566623f18f566">fm_computeBestFitOBB</a>(uint32_t vcount,<span class="keyword">const</span> <span class="keywordtype">float</span> *points,uint32_t pstride,<span class="keywordtype">float</span> *sides,<span class="keywordtype">float</span> pos[3],<span class="keywordtype">float</span> quat[4],<span class="keywordtype">bool</span> bruteForce=<span class="keyword">true</span>);
<a name="l00353"></a>00353 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#60e918c2ee5358ed7fd566623f18f566">fm_computeBestFitOBB</a>(uint32_t vcount,<span class="keyword">const</span> <span class="keywordtype">double</span> *points,uint32_t pstride,<span class="keywordtype">double</span> *sides,<span class="keywordtype">double</span> pos[3],<span class="keywordtype">double</span> quat[4],<span class="keywordtype">bool</span> bruteForce=<span class="keyword">true</span>);
<a name="l00354"></a>00354
<a name="l00355"></a>00355 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#4719b5216a887947c4c98e3b06844d9b">fm_computeBestFitABB</a>(uint32_t vcount,<span class="keyword">const</span> <span class="keywordtype">float</span> *points,uint32_t pstride,<span class="keywordtype">float</span> *sides,<span class="keywordtype">float</span> pos[3]);
<a name="l00356"></a>00356 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#4719b5216a887947c4c98e3b06844d9b">fm_computeBestFitABB</a>(uint32_t vcount,<span class="keyword">const</span> <span class="keywordtype">double</span> *points,uint32_t pstride,<span class="keywordtype">double</span> *sides,<span class="keywordtype">double</span> pos[3]);
<a name="l00357"></a>00357
<a name="l00358"></a>00358
<a name="l00359"></a>00359 <span class="comment">//** Note, if the returned capsule height is less than zero, then you must represent it is a sphere of size radius.</span>
<a name="l00360"></a>00360 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#cb48dcc76450c14ccb5cf133c2d02b54">fm_computeBestFitCapsule</a>(uint32_t vcount,<span class="keyword">const</span> <span class="keywordtype">float</span> *points,uint32_t pstride,<span class="keywordtype">float</span> &radius,<span class="keywordtype">float</span> &height,<span class="keywordtype">float</span> matrix[16],<span class="keywordtype">bool</span> bruteForce=<span class="keyword">true</span>);
<a name="l00361"></a>00361 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#cb48dcc76450c14ccb5cf133c2d02b54">fm_computeBestFitCapsule</a>(uint32_t vcount,<span class="keyword">const</span> <span class="keywordtype">double</span> *points,uint32_t pstride,<span class="keywordtype">float</span> &radius,<span class="keywordtype">float</span> &height,<span class="keywordtype">double</span> matrix[16],<span class="keywordtype">bool</span> bruteForce=<span class="keyword">true</span>);
<a name="l00362"></a>00362
<a name="l00363"></a>00363
<a name="l00364"></a>00364 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#9624b57c4b00648ed09e15b1ec266c32">fm_planeToMatrix</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> plane[4],<span class="keywordtype">float</span> matrix[16]); <span class="comment">// convert a plane equation to a 4x4 rotation matrix. Reference vector is 0,1,0</span>
<a name="l00365"></a>00365 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#a885c49a2b1b1cb2be57b88c567d6cc2">fm_planeToQuat</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> plane[4],<span class="keywordtype">float</span> quat[4],<span class="keywordtype">float</span> pos[3]); <span class="comment">// convert a plane equation to a quaternion and translation</span>
<a name="l00366"></a>00366
<a name="l00367"></a>00367 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#9624b57c4b00648ed09e15b1ec266c32">fm_planeToMatrix</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> plane[4],<span class="keywordtype">double</span> matrix[16]); <span class="comment">// convert a plane equation to a 4x4 rotation matrix</span>
<a name="l00368"></a>00368 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#a885c49a2b1b1cb2be57b88c567d6cc2">fm_planeToQuat</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> plane[4],<span class="keywordtype">double</span> quat[4],<span class="keywordtype">double</span> pos[3]); <span class="comment">// convert a plane equation to a quaternion and translation</span>
<a name="l00369"></a>00369
<a name="l00370"></a><a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#7d9d7f616ab8179bef4ded2167ce5050">00370</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#7d9d7f616ab8179bef4ded2167ce5050">fm_doubleToFloat3</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> p[3],<span class="keywordtype">float</span> t[3]) { t[0] = (float) p[0]; t[1] = (float)p[1]; t[2] = (float)p[2]; };
<a name="l00371"></a><a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#13583f8cd7fc965e170e52c7e8590c57">00371</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#13583f8cd7fc965e170e52c7e8590c57">fm_floatToDouble3</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> p[3],<span class="keywordtype">double</span> t[3]) { t[0] = (double)p[0]; t[1] = (double)p[1]; t[2] = (double)p[2]; };
<a name="l00372"></a>00372
<a name="l00373"></a>00373
<a name="l00374"></a>00374 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#099943af57cdcf6f5d70249dac806205">fm_eulerMatrix</a>(<span class="keywordtype">float</span> ax,<span class="keywordtype">float</span> ay,<span class="keywordtype">float</span> az,<span class="keywordtype">float</span> matrix[16]); <span class="comment">// convert euler (in radians) to a dest 4x4 matrix (translation set to zero)</span>
<a name="l00375"></a>00375 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#099943af57cdcf6f5d70249dac806205">fm_eulerMatrix</a>(<span class="keywordtype">double</span> ax,<span class="keywordtype">double</span> ay,<span class="keywordtype">double</span> az,<span class="keywordtype">double</span> matrix[16]); <span class="comment">// convert euler (in radians) to a dest 4x4 matrix (translation set to zero)</span>
<a name="l00376"></a>00376
<a name="l00377"></a>00377
<a name="l00378"></a>00378 <span class="keywordtype">float</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#01f6b76a126b8ddb6bc75fcb24d56b63">fm_computeMeshVolume</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> *vertices,uint32_t tcount,<span class="keyword">const</span> uint32_t *indices);
<a name="l00379"></a>00379 <span class="keywordtype">double</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#01f6b76a126b8ddb6bc75fcb24d56b63">fm_computeMeshVolume</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> *vertices,uint32_t tcount,<span class="keyword">const</span> uint32_t *indices);
<a name="l00380"></a>00380
<a name="l00381"></a>00381
<a name="l00382"></a><a class="code" href="_float_math_8h.html#9da2fa07f097e59a3697d603b2c2f541">00382</a> <span class="preprocessor">#define FM_DEFAULT_GRANULARITY 0.001f // 1 millimeter is the default granularity</span>
<a name="l00383"></a>00383 <span class="preprocessor"></span>
<a name="l00384"></a><a class="code" href="class_f_l_o_a_t___m_a_t_h_1_1fm___vertex_index.html">00384</a> <span class="keyword">class </span><a class="code" href="class_f_l_o_a_t___m_a_t_h_1_1fm___vertex_index.html">fm_VertexIndex</a>
<a name="l00385"></a>00385 {
<a name="l00386"></a>00386 <span class="keyword">public</span>:
<a name="l00387"></a>00387 <span class="keyword">virtual</span> uint32_t <a class="code" href="class_f_l_o_a_t___m_a_t_h_1_1fm___vertex_index.html#f0a76c201e908058e0565fb589d5c8ec">getIndex</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> pos[3],<span class="keywordtype">bool</span> &newPos) = 0; <span class="comment">// get welded index for this float vector[3]</span>
<a name="l00388"></a>00388 <span class="keyword">virtual</span> uint32_t <a class="code" href="class_f_l_o_a_t___m_a_t_h_1_1fm___vertex_index.html#f0a76c201e908058e0565fb589d5c8ec">getIndex</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> pos[3],<span class="keywordtype">bool</span> &newPos) = 0; <span class="comment">// get welded index for this double vector[3]</span>
<a name="l00389"></a>00389 <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">float</span> * <a class="code" href="class_f_l_o_a_t___m_a_t_h_1_1fm___vertex_index.html#bfe5370a180b9df682e22968618c493d">getVerticesFloat</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span> = 0;
<a name="l00390"></a>00390 <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">double</span> * <a class="code" href="class_f_l_o_a_t___m_a_t_h_1_1fm___vertex_index.html#228633b9540532db6c15b7a27db85531">getVerticesDouble</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span> = 0;
<a name="l00391"></a>00391 <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">float</span> * <a class="code" href="class_f_l_o_a_t___m_a_t_h_1_1fm___vertex_index.html#116ff6211b3875be4f6959e9bfc3f52a">getVertexFloat</a>(uint32_t index) <span class="keyword">const</span> = 0;
<a name="l00392"></a>00392 <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">double</span> * <a class="code" href="class_f_l_o_a_t___m_a_t_h_1_1fm___vertex_index.html#d6917c7d9b0af0fbb6de0bbfc822b2a4">getVertexDouble</a>(uint32_t index) <span class="keyword">const</span> = 0;
<a name="l00393"></a>00393 <span class="keyword">virtual</span> uint32_t <a class="code" href="class_f_l_o_a_t___m_a_t_h_1_1fm___vertex_index.html#4e440ed85cbfd3f02790a346dc448d91">getVcount</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span> = 0;
<a name="l00394"></a>00394 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="class_f_l_o_a_t___m_a_t_h_1_1fm___vertex_index.html#7d546cd3a301fd47bfde8cdd8f9ff950">isDouble</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span> = 0;
<a name="l00395"></a>00395 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="class_f_l_o_a_t___m_a_t_h_1_1fm___vertex_index.html#c0d22736210b88c849562c30481437d0">saveAsObj</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *fname,uint32_t tcount,uint32_t *indices) = 0;
<a name="l00396"></a>00396 };
<a name="l00397"></a>00397
<a name="l00398"></a>00398 <a class="code" href="class_f_l_o_a_t___m_a_t_h_1_1fm___vertex_index.html">fm_VertexIndex</a> * <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#5ca83507e14e16aae1d3d49f43fcbf48">fm_createVertexIndex</a>(<span class="keywordtype">double</span> granularity,<span class="keywordtype">bool</span> snapToGrid); <span class="comment">// create an indexed vertex system for doubles</span>
<a name="l00399"></a>00399 <a class="code" href="class_f_l_o_a_t___m_a_t_h_1_1fm___vertex_index.html">fm_VertexIndex</a> * <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#5ca83507e14e16aae1d3d49f43fcbf48">fm_createVertexIndex</a>(<span class="keywordtype">float</span> granularity,<span class="keywordtype">bool</span> snapToGrid); <span class="comment">// create an indexed vertext system for floats</span>
<a name="l00400"></a>00400 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#7e401fb5f8d705ba7726af2c0beea70d">fm_releaseVertexIndex</a>(<a class="code" href="class_f_l_o_a_t___m_a_t_h_1_1fm___vertex_index.html">fm_VertexIndex</a> *vindex);
<a name="l00401"></a>00401
<a name="l00402"></a>00402
<a name="l00403"></a><a class="code" href="class_f_l_o_a_t___m_a_t_h_1_1fm___triangulate.html">00403</a> <span class="keyword">class </span><a class="code" href="class_f_l_o_a_t___m_a_t_h_1_1fm___triangulate.html">fm_Triangulate</a>
<a name="l00404"></a>00404 {
<a name="l00405"></a>00405 <span class="keyword">public</span>:
<a name="l00406"></a>00406 <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">double</span> * <a class="code" href="class_f_l_o_a_t___m_a_t_h_1_1fm___triangulate.html#995315805c698e94bd4dd85409d042c3">triangulate3d</a>(uint32_t pcount,
<a name="l00407"></a>00407 <span class="keyword">const</span> <span class="keywordtype">double</span> *points,
<a name="l00408"></a>00408 uint32_t vstride,
<a name="l00409"></a>00409 uint32_t &tcount,
<a name="l00410"></a>00410 <span class="keywordtype">bool</span> consolidate,
<a name="l00411"></a>00411 <span class="keywordtype">double</span> epsilon) = 0;
<a name="l00412"></a>00412
<a name="l00413"></a>00413 <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">float</span> * <a class="code" href="class_f_l_o_a_t___m_a_t_h_1_1fm___triangulate.html#995315805c698e94bd4dd85409d042c3">triangulate3d</a>(uint32_t pcount,
<a name="l00414"></a>00414 <span class="keyword">const</span> <span class="keywordtype">float</span> *points,
<a name="l00415"></a>00415 uint32_t vstride,
<a name="l00416"></a>00416 uint32_t &tcount,
<a name="l00417"></a>00417 <span class="keywordtype">bool</span> consolidate,
<a name="l00418"></a>00418 <span class="keywordtype">float</span> epsilon) = 0;
<a name="l00419"></a>00419 };
<a name="l00420"></a>00420
<a name="l00421"></a>00421 <a class="code" href="class_f_l_o_a_t___m_a_t_h_1_1fm___triangulate.html">fm_Triangulate</a> * <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#f2757653a894b33ffa13feef4e931a69">fm_createTriangulate</a>(<span class="keywordtype">void</span>);
<a name="l00422"></a>00422 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#6235a78977f152249b51e3b7095e8bb1">fm_releaseTriangulate</a>(<a class="code" href="class_f_l_o_a_t___m_a_t_h_1_1fm___triangulate.html">fm_Triangulate</a> *t);
<a name="l00423"></a>00423
<a name="l00424"></a>00424
<a name="l00425"></a>00425 <span class="keyword">const</span> <span class="keywordtype">float</span> * <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#51e027555f4bfefcd4b3f516b0d7c25a">fm_getPoint</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> *points,uint32_t pstride,uint32_t index);
<a name="l00426"></a>00426 <span class="keyword">const</span> <span class="keywordtype">double</span> * <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#51e027555f4bfefcd4b3f516b0d7c25a">fm_getPoint</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> *points,uint32_t pstride,uint32_t index);
<a name="l00427"></a>00427
<a name="l00428"></a>00428 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#437d2da1a476dd4f020e57dd8ad3803c">fm_insideTriangle</a>(<span class="keywordtype">float</span> Ax, <span class="keywordtype">float</span> Ay,<span class="keywordtype">float</span> Bx, <span class="keywordtype">float</span> By,<span class="keywordtype">float</span> Cx, <span class="keywordtype">float</span> Cy,<span class="keywordtype">float</span> Px, <span class="keywordtype">float</span> Py);
<a name="l00429"></a>00429 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#437d2da1a476dd4f020e57dd8ad3803c">fm_insideTriangle</a>(<span class="keywordtype">double</span> Ax, <span class="keywordtype">double</span> Ay,<span class="keywordtype">double</span> Bx, <span class="keywordtype">double</span> By,<span class="keywordtype">double</span> Cx, <span class="keywordtype">double</span> Cy,<span class="keywordtype">double</span> Px, <span class="keywordtype">double</span> Py);
<a name="l00430"></a>00430 <span class="keywordtype">float</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#8022779a39f2d98d0d1e59dc9e0ff382">fm_areaPolygon2d</a>(uint32_t pcount,<span class="keyword">const</span> <span class="keywordtype">float</span> *points,uint32_t pstride);
<a name="l00431"></a>00431 <span class="keywordtype">double</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#8022779a39f2d98d0d1e59dc9e0ff382">fm_areaPolygon2d</a>(uint32_t pcount,<span class="keyword">const</span> <span class="keywordtype">double</span> *points,uint32_t pstride);
<a name="l00432"></a>00432
<a name="l00433"></a>00433 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#6143f60040a0bb5d1dcf7ad2dc19b192">fm_pointInsidePolygon2d</a>(uint32_t pcount,<span class="keyword">const</span> <span class="keywordtype">float</span> *points,uint32_t pstride,<span class="keyword">const</span> <span class="keywordtype">float</span> *point,uint32_t xindex=0,uint32_t yindex=1);
<a name="l00434"></a>00434 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#6143f60040a0bb5d1dcf7ad2dc19b192">fm_pointInsidePolygon2d</a>(uint32_t pcount,<span class="keyword">const</span> <span class="keywordtype">double</span> *points,uint32_t pstride,<span class="keyword">const</span> <span class="keywordtype">double</span> *point,uint32_t xindex=0,uint32_t yindex=1);
<a name="l00435"></a>00435
<a name="l00436"></a>00436 uint32_t <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#8d49d5613f198a6c4be6f32dbb1ad7d5">fm_consolidatePolygon</a>(uint32_t pcount,<span class="keyword">const</span> <span class="keywordtype">float</span> *points,uint32_t pstride,<span class="keywordtype">float</span> *dest,<span class="keywordtype">float</span> epsilon=0.999999f); <span class="comment">// collapses co-linear edges.</span>
<a name="l00437"></a>00437 uint32_t <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#8d49d5613f198a6c4be6f32dbb1ad7d5">fm_consolidatePolygon</a>(uint32_t pcount,<span class="keyword">const</span> <span class="keywordtype">double</span> *points,uint32_t pstride,<span class="keywordtype">double</span> *dest,<span class="keywordtype">double</span> epsilon=0.999999); <span class="comment">// collapses co-linear edges.</span>
<a name="l00438"></a>00438
<a name="l00439"></a>00439
<a name="l00440"></a>00440 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#e6c3d39e600a5a6588a12c0df1bc180b">fm_computeSplitPlane</a>(uint32_t vcount,<span class="keyword">const</span> <span class="keywordtype">double</span> *vertices,uint32_t tcount,<span class="keyword">const</span> uint32_t *indices,<span class="keywordtype">double</span> *plane);
<a name="l00441"></a>00441 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#e6c3d39e600a5a6588a12c0df1bc180b">fm_computeSplitPlane</a>(uint32_t vcount,<span class="keyword">const</span> <span class="keywordtype">float</span> *vertices,uint32_t tcount,<span class="keyword">const</span> uint32_t *indices,<span class="keywordtype">float</span> *plane);
<a name="l00442"></a>00442
<a name="l00443"></a>00443 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#ab1bd86fa8cba57940d8de52aa5a4c07">fm_nearestPointInTriangle</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> *pos,<span class="keyword">const</span> <span class="keywordtype">float</span> *p1,<span class="keyword">const</span> <span class="keywordtype">float</span> *p2,<span class="keyword">const</span> <span class="keywordtype">float</span> *p3,<span class="keywordtype">float</span> *nearest);
<a name="l00444"></a>00444 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#ab1bd86fa8cba57940d8de52aa5a4c07">fm_nearestPointInTriangle</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> *pos,<span class="keyword">const</span> <span class="keywordtype">double</span> *p1,<span class="keyword">const</span> <span class="keywordtype">double</span> *p2,<span class="keyword">const</span> <span class="keywordtype">double</span> *p3,<span class="keywordtype">double</span> *nearest);
<a name="l00445"></a>00445
<a name="l00446"></a>00446 <span class="keywordtype">float</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#3c2c25509bb923e3a67f2f4229a0c524">fm_areaTriangle</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> *p1,<span class="keyword">const</span> <span class="keywordtype">float</span> *p2,<span class="keyword">const</span> <span class="keywordtype">float</span> *p3);
<a name="l00447"></a>00447 <span class="keywordtype">double</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#3c2c25509bb923e3a67f2f4229a0c524">fm_areaTriangle</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> *p1,<span class="keyword">const</span> <span class="keywordtype">double</span> *p2,<span class="keyword">const</span> <span class="keywordtype">double</span> *p3);
<a name="l00448"></a>00448
<a name="l00449"></a>00449 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#60de5964eed515c5785fcad85a0a7efa">fm_subtract</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> *A,<span class="keyword">const</span> <span class="keywordtype">float</span> *B,<span class="keywordtype">float</span> *diff); <span class="comment">// compute A-B and store the result in 'diff'</span>
<a name="l00450"></a>00450 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#60de5964eed515c5785fcad85a0a7efa">fm_subtract</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> *A,<span class="keyword">const</span> <span class="keywordtype">double</span> *B,<span class="keywordtype">double</span> *diff); <span class="comment">// compute A-B and store the result in 'diff'</span>
<a name="l00451"></a>00451
<a name="l00452"></a>00452 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#d94a34778edfa8266a2cf5c3a9aecd7d">fm_multiply</a>(<span class="keywordtype">float</span> *A,<span class="keywordtype">float</span> scaler);
<a name="l00453"></a>00453 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#d94a34778edfa8266a2cf5c3a9aecd7d">fm_multiply</a>(<span class="keywordtype">double</span> *A,<span class="keywordtype">double</span> scaler);
<a name="l00454"></a>00454
<a name="l00455"></a>00455 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#950524c52471990ccd5ab8ffd2fdace4">fm_add</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> *A,<span class="keyword">const</span> <span class="keywordtype">float</span> *B,<span class="keywordtype">float</span> *sum);
<a name="l00456"></a>00456 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#950524c52471990ccd5ab8ffd2fdace4">fm_add</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> *A,<span class="keyword">const</span> <span class="keywordtype">double</span> *B,<span class="keywordtype">double</span> *sum);
<a name="l00457"></a>00457
<a name="l00458"></a>00458 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#ec4465fd7d2f2b8c93db8949a7c5a68e">fm_copy3</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> *source,<span class="keywordtype">float</span> *dest);
<a name="l00459"></a>00459 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#ec4465fd7d2f2b8c93db8949a7c5a68e">fm_copy3</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> *source,<span class="keywordtype">double</span> *dest);
<a name="l00460"></a>00460
<a name="l00461"></a>00461 <span class="comment">// re-indexes an indexed triangle mesh but drops unused vertices. The output_indices can be the same pointer as the input indices.</span>
<a name="l00462"></a>00462 <span class="comment">// the output_vertices can point to the input vertices if you desire. The output_vertices buffer should be at least the same size</span>
<a name="l00463"></a>00463 <span class="comment">// is the input buffer. The routine returns the new vertex count after re-indexing.</span>
<a name="l00464"></a>00464 uint32_t <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#66660b41c914e7f74dfeb7a63ae577bb">fm_copyUniqueVertices</a>(uint32_t vcount,<span class="keyword">const</span> <span class="keywordtype">float</span> *input_vertices,<span class="keywordtype">float</span> *output_vertices,uint32_t tcount,<span class="keyword">const</span> uint32_t *input_indices,uint32_t *output_indices);
<a name="l00465"></a>00465 uint32_t <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#66660b41c914e7f74dfeb7a63ae577bb">fm_copyUniqueVertices</a>(uint32_t vcount,<span class="keyword">const</span> <span class="keywordtype">double</span> *input_vertices,<span class="keywordtype">double</span> *output_vertices,uint32_t tcount,<span class="keyword">const</span> uint32_t *input_indices,uint32_t *output_indices);
<a name="l00466"></a>00466
<a name="l00467"></a>00467 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#06301f8df72d582ed0504a42d7a63d09">fm_isMeshCoplanar</a>(uint32_t tcount,<span class="keyword">const</span> uint32_t *indices,<span class="keyword">const</span> <span class="keywordtype">float</span> *vertices,<span class="keywordtype">bool</span> doubleSided); <span class="comment">// returns true if this collection of indexed triangles are co-planar!</span>
<a name="l00468"></a>00468 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#06301f8df72d582ed0504a42d7a63d09">fm_isMeshCoplanar</a>(uint32_t tcount,<span class="keyword">const</span> uint32_t *indices,<span class="keyword">const</span> <span class="keywordtype">double</span> *vertices,<span class="keywordtype">bool</span> doubleSided); <span class="comment">// returns true if this collection of indexed triangles are co-planar!</span>
<a name="l00469"></a>00469
<a name="l00470"></a>00470 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#b7f413a7722f01daa020b05ea6cf000c">fm_samePlane</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> p1[4],<span class="keyword">const</span> <span class="keywordtype">float</span> p2[4],<span class="keywordtype">float</span> normalEpsilon=0.01f,<span class="keywordtype">float</span> dEpsilon=0.001f,<span class="keywordtype">bool</span> doubleSided=<span class="keyword">false</span>); <span class="comment">// returns true if these two plane equations are identical within an epsilon</span>
<a name="l00471"></a>00471 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#b7f413a7722f01daa020b05ea6cf000c">fm_samePlane</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> p1[4],<span class="keyword">const</span> <span class="keywordtype">double</span> p2[4],<span class="keywordtype">double</span> normalEpsilon=0.01,<span class="keywordtype">double</span> dEpsilon=0.001,<span class="keywordtype">bool</span> doubleSided=<span class="keyword">false</span>);
<a name="l00472"></a>00472
<a name="l00473"></a>00473 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#44b5172cfcadc77e68e1886cc5a33d4a">fm_OBBtoAABB</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> obmin[3],<span class="keyword">const</span> <span class="keywordtype">float</span> obmax[3],<span class="keyword">const</span> <span class="keywordtype">float</span> matrix[16],<span class="keywordtype">float</span> abmin[3],<span class="keywordtype">float</span> abmax[3]);
<a name="l00474"></a>00474
<a name="l00475"></a>00475 <span class="comment">// a utility class that will tessellate a mesh.</span>
<a name="l00476"></a><a class="code" href="class_f_l_o_a_t___m_a_t_h_1_1fm___tesselate.html">00476</a> <span class="keyword">class </span><a class="code" href="class_f_l_o_a_t___m_a_t_h_1_1fm___tesselate.html">fm_Tesselate</a>
<a name="l00477"></a>00477 {
<a name="l00478"></a>00478 <span class="keyword">public</span>:
<a name="l00479"></a>00479 <span class="keyword">virtual</span> <span class="keyword">const</span> uint32_t * <a class="code" href="class_f_l_o_a_t___m_a_t_h_1_1fm___tesselate.html#2709e4a7d794f0d2ac23d077bc22629b">tesselate</a>(<a class="code" href="class_f_l_o_a_t___m_a_t_h_1_1fm___vertex_index.html">fm_VertexIndex</a> *vindex,uint32_t tcount,<span class="keyword">const</span> uint32_t *indices,<span class="keywordtype">float</span> longEdge,uint32_t maxDepth,uint32_t &outcount) = 0;
<a name="l00480"></a>00480 };
<a name="l00481"></a>00481
<a name="l00482"></a>00482 <a class="code" href="class_f_l_o_a_t___m_a_t_h_1_1fm___tesselate.html">fm_Tesselate</a> * <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#24043d9e6a8342127bda2d663e91c2a9">fm_createTesselate</a>(<span class="keywordtype">void</span>);
<a name="l00483"></a>00483 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#538e188095ec76178ab7cfe067b8fad4">fm_releaseTesselate</a>(<a class="code" href="class_f_l_o_a_t___m_a_t_h_1_1fm___tesselate.html">fm_Tesselate</a> *t);
<a name="l00484"></a>00484
<a name="l00485"></a>00485 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#09bbac02b2d9b71ee13de5b8affe1830">fm_computeMeanNormals</a>(uint32_t vcount, <span class="comment">// the number of vertices</span>
<a name="l00486"></a>00486 <span class="keyword">const</span> <span class="keywordtype">float</span> *vertices, <span class="comment">// the base address of the vertex position data.</span>
<a name="l00487"></a>00487 uint32_t vstride, <span class="comment">// the stride between position data.</span>
<a name="l00488"></a>00488 <span class="keywordtype">float</span> *normals, <span class="comment">// the base address of the destination for mean vector normals</span>
<a name="l00489"></a>00489 uint32_t nstride, <span class="comment">// the stride between normals</span>
<a name="l00490"></a>00490 uint32_t tcount, <span class="comment">// the number of triangles</span>
<a name="l00491"></a>00491 <span class="keyword">const</span> uint32_t *indices); <span class="comment">// the triangle indices</span>
<a name="l00492"></a>00492
<a name="l00493"></a>00493 <span class="keywordtype">void</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#09bbac02b2d9b71ee13de5b8affe1830">fm_computeMeanNormals</a>(uint32_t vcount, <span class="comment">// the number of vertices</span>
<a name="l00494"></a>00494 <span class="keyword">const</span> <span class="keywordtype">double</span> *vertices, <span class="comment">// the base address of the vertex position data.</span>
<a name="l00495"></a>00495 uint32_t vstride, <span class="comment">// the stride between position data.</span>
<a name="l00496"></a>00496 <span class="keywordtype">double</span> *normals, <span class="comment">// the base address of the destination for mean vector normals</span>
<a name="l00497"></a>00497 uint32_t nstride, <span class="comment">// the stride between normals</span>
<a name="l00498"></a>00498 uint32_t tcount, <span class="comment">// the number of triangles</span>
<a name="l00499"></a>00499 <span class="keyword">const</span> uint32_t *indices); <span class="comment">// the triangle indices</span>
<a name="l00500"></a>00500
<a name="l00501"></a>00501
<a name="l00502"></a>00502 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#141c1e360636067eae8247cf7bcb7e22">fm_isValidTriangle</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> *p1,<span class="keyword">const</span> <span class="keywordtype">float</span> *p2,<span class="keyword">const</span> <span class="keywordtype">float</span> *p3,<span class="keywordtype">float</span> epsilon=0.00001f);
<a name="l00503"></a>00503 <span class="keywordtype">bool</span> <a class="code" href="namespace_f_l_o_a_t___m_a_t_h.html#141c1e360636067eae8247cf7bcb7e22">fm_isValidTriangle</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> *p1,<span class="keyword">const</span> <span class="keywordtype">double</span> *p2,<span class="keyword">const</span> <span class="keywordtype">double</span> *p3,<span class="keywordtype">double</span> epsilon=0.00001f);
<a name="l00504"></a>00504
<a name="l00505"></a>00505 }; <span class="comment">// end of namespace</span>
<a name="l00506"></a>00506
<a name="l00507"></a>00507 <span class="preprocessor">#endif</span>
</pre></div></div>
<!-- start footer part -->
<div class="footer">
Copyright © 2015-2017 NVIDIA Corporation, 2701 San Tomas Expressway, Santa Clara, CA 95050 U.S.A. All rights reserved. <a href="http://www.nvidia.com ">www.nvidia.com</a>
</div>
</body>
</html>
|