/[cvs]/api/include/d3dx8math.inl
ViewVC logotype

Contents of /api/include/d3dx8math.inl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (show annotations) (vendor branch)
Sun Jul 1 20:47:59 2001 UTC (22 years, 10 months ago) by bearsoft
Branch: lazy, MAIN
CVS Tags: start, HEAD
Changes since 1.1: +0 -0 lines
First import

1 //////////////////////////////////////////////////////////////////////////////
2 //
3 // Copyright (C) 1998 Microsoft Corporation. All Rights Reserved.
4 //
5 // File: d3dx8math.inl
6 // Content: D3DX math inline functions
7 //
8 //////////////////////////////////////////////////////////////////////////////
9
10 #ifndef __D3DX8MATH_INL__
11 #define __D3DX8MATH_INL__
12
13
14 //===========================================================================
15 //
16 // Inline Class Methods
17 //
18 //===========================================================================
19
20 #ifdef __cplusplus
21
22 //--------------------------
23 // 2D Vector
24 //--------------------------
25
26 D3DXINLINE
27 D3DXVECTOR2::D3DXVECTOR2( CONST FLOAT *pf )
28 {
29 #ifdef D3DX_DEBUG
30 if(!pf)
31 return;
32 #endif
33
34 x = pf[0];
35 y = pf[1];
36 }
37
38 D3DXINLINE
39 D3DXVECTOR2::D3DXVECTOR2( FLOAT fx, FLOAT fy )
40 {
41 x = fx;
42 y = fy;
43 }
44
45 // casting
46 D3DXINLINE
47 D3DXVECTOR2::operator FLOAT* ()
48 {
49 return (FLOAT *) &x;
50 }
51
52 D3DXINLINE
53 D3DXVECTOR2::operator CONST FLOAT* () const
54 {
55 return (CONST FLOAT *) &x;
56 }
57
58 // assignment operators
59 D3DXINLINE D3DXVECTOR2&
60 D3DXVECTOR2::operator += ( CONST D3DXVECTOR2& v )
61 {
62 x += v.x;
63 y += v.y;
64 return *this;
65 }
66
67 D3DXINLINE D3DXVECTOR2&
68 D3DXVECTOR2::operator -= ( CONST D3DXVECTOR2& v )
69 {
70 x -= v.x;
71 y -= v.y;
72 return *this;
73 }
74
75 D3DXINLINE D3DXVECTOR2&
76 D3DXVECTOR2::operator *= ( FLOAT f )
77 {
78 x *= f;
79 y *= f;
80 return *this;
81 }
82
83 D3DXINLINE D3DXVECTOR2&
84 D3DXVECTOR2::operator /= ( FLOAT f )
85 {
86 FLOAT fInv = 1.0f / f;
87 x *= fInv;
88 y *= fInv;
89 return *this;
90 }
91
92 // unary operators
93 D3DXINLINE D3DXVECTOR2
94 D3DXVECTOR2::operator + () const
95 {
96 return *this;
97 }
98
99 D3DXINLINE D3DXVECTOR2
100 D3DXVECTOR2::operator - () const
101 {
102 return D3DXVECTOR2(-x, -y);
103 }
104
105 // binary operators
106 D3DXINLINE D3DXVECTOR2
107 D3DXVECTOR2::operator + ( CONST D3DXVECTOR2& v ) const
108 {
109 return D3DXVECTOR2(x + v.x, y + v.y);
110 }
111
112 D3DXINLINE D3DXVECTOR2
113 D3DXVECTOR2::operator - ( CONST D3DXVECTOR2& v ) const
114 {
115 return D3DXVECTOR2(x - v.x, y - v.y);
116 }
117
118 D3DXINLINE D3DXVECTOR2
119 D3DXVECTOR2::operator * ( FLOAT f ) const
120 {
121 return D3DXVECTOR2(x * f, y * f);
122 }
123
124 D3DXINLINE D3DXVECTOR2
125 D3DXVECTOR2::operator / ( FLOAT f ) const
126 {
127 FLOAT fInv = 1.0f / f;
128 return D3DXVECTOR2(x * fInv, y * fInv);
129 }
130
131
132 D3DXINLINE D3DXVECTOR2
133 operator * ( FLOAT f, CONST D3DXVECTOR2& v )
134 {
135 return D3DXVECTOR2(f * v.x, f * v.y);
136 }
137
138 D3DXINLINE BOOL
139 D3DXVECTOR2::operator == ( CONST D3DXVECTOR2& v ) const
140 {
141 return x == v.x && y == v.y;
142 }
143
144 D3DXINLINE BOOL
145 D3DXVECTOR2::operator != ( CONST D3DXVECTOR2& v ) const
146 {
147 return x != v.x || y != v.y;
148 }
149
150
151
152
153 //--------------------------
154 // 3D Vector
155 //--------------------------
156 D3DXINLINE
157 D3DXVECTOR3::D3DXVECTOR3( CONST FLOAT *pf )
158 {
159 #ifdef D3DX_DEBUG
160 if(!pf)
161 return;
162 #endif
163
164 x = pf[0];
165 y = pf[1];
166 z = pf[2];
167 }
168
169 D3DXINLINE
170 D3DXVECTOR3::D3DXVECTOR3( CONST D3DVECTOR& v )
171 {
172 x = v.x;
173 y = v.y;
174 z = v.z;
175 }
176
177 D3DXINLINE
178 D3DXVECTOR3::D3DXVECTOR3( FLOAT fx, FLOAT fy, FLOAT fz )
179 {
180 x = fx;
181 y = fy;
182 z = fz;
183 }
184
185
186 // casting
187 D3DXINLINE
188 D3DXVECTOR3::operator FLOAT* ()
189 {
190 return (FLOAT *) &x;
191 }
192
193 D3DXINLINE
194 D3DXVECTOR3::operator CONST FLOAT* () const
195 {
196 return (CONST FLOAT *) &x;
197 }
198
199
200 // assignment operators
201 D3DXINLINE D3DXVECTOR3&
202 D3DXVECTOR3::operator += ( CONST D3DXVECTOR3& v )
203 {
204 x += v.x;
205 y += v.y;
206 z += v.z;
207 return *this;
208 }
209
210 D3DXINLINE D3DXVECTOR3&
211 D3DXVECTOR3::operator -= ( CONST D3DXVECTOR3& v )
212 {
213 x -= v.x;
214 y -= v.y;
215 z -= v.z;
216 return *this;
217 }
218
219 D3DXINLINE D3DXVECTOR3&
220 D3DXVECTOR3::operator *= ( FLOAT f )
221 {
222 x *= f;
223 y *= f;
224 z *= f;
225 return *this;
226 }
227
228 D3DXINLINE D3DXVECTOR3&
229 D3DXVECTOR3::operator /= ( FLOAT f )
230 {
231 FLOAT fInv = 1.0f / f;
232 x *= fInv;
233 y *= fInv;
234 z *= fInv;
235 return *this;
236 }
237
238
239 // unary operators
240 D3DXINLINE D3DXVECTOR3
241 D3DXVECTOR3::operator + () const
242 {
243 return *this;
244 }
245
246 D3DXINLINE D3DXVECTOR3
247 D3DXVECTOR3::operator - () const
248 {
249 return D3DXVECTOR3(-x, -y, -z);
250 }
251
252
253 // binary operators
254 D3DXINLINE D3DXVECTOR3
255 D3DXVECTOR3::operator + ( CONST D3DXVECTOR3& v ) const
256 {
257 return D3DXVECTOR3(x + v.x, y + v.y, z + v.z);
258 }
259
260 D3DXINLINE D3DXVECTOR3
261 D3DXVECTOR3::operator - ( CONST D3DXVECTOR3& v ) const
262 {
263 return D3DXVECTOR3(x - v.x, y - v.y, z - v.z);
264 }
265
266 D3DXINLINE D3DXVECTOR3
267 D3DXVECTOR3::operator * ( FLOAT f ) const
268 {
269 return D3DXVECTOR3(x * f, y * f, z * f);
270 }
271
272 D3DXINLINE D3DXVECTOR3
273 D3DXVECTOR3::operator / ( FLOAT f ) const
274 {
275 FLOAT fInv = 1.0f / f;
276 return D3DXVECTOR3(x * fInv, y * fInv, z * fInv);
277 }
278
279
280 D3DXINLINE D3DXVECTOR3
281 operator * ( FLOAT f, CONST struct D3DXVECTOR3& v )
282 {
283 return D3DXVECTOR3(f * v.x, f * v.y, f * v.z);
284 }
285
286
287 D3DXINLINE BOOL
288 D3DXVECTOR3::operator == ( CONST D3DXVECTOR3& v ) const
289 {
290 return x == v.x && y == v.y && z == v.z;
291 }
292
293 D3DXINLINE BOOL
294 D3DXVECTOR3::operator != ( CONST D3DXVECTOR3& v ) const
295 {
296 return x != v.x || y != v.y || z != v.z;
297 }
298
299
300
301 //--------------------------
302 // 4D Vector
303 //--------------------------
304 D3DXINLINE
305 D3DXVECTOR4::D3DXVECTOR4( CONST FLOAT *pf )
306 {
307 #ifdef D3DX_DEBUG
308 if(!pf)
309 return;
310 #endif
311
312 x = pf[0];
313 y = pf[1];
314 z = pf[2];
315 w = pf[3];
316 }
317
318 D3DXINLINE
319 D3DXVECTOR4::D3DXVECTOR4( FLOAT fx, FLOAT fy, FLOAT fz, FLOAT fw )
320 {
321 x = fx;
322 y = fy;
323 z = fz;
324 w = fw;
325 }
326
327
328 // casting
329 D3DXINLINE
330 D3DXVECTOR4::operator FLOAT* ()
331 {
332 return (FLOAT *) &x;
333 }
334
335 D3DXINLINE
336 D3DXVECTOR4::operator CONST FLOAT* () const
337 {
338 return (CONST FLOAT *) &x;
339 }
340
341
342 // assignment operators
343 D3DXINLINE D3DXVECTOR4&
344 D3DXVECTOR4::operator += ( CONST D3DXVECTOR4& v )
345 {
346 x += v.x;
347 y += v.y;
348 z += v.z;
349 w += v.w;
350 return *this;
351 }
352
353 D3DXINLINE D3DXVECTOR4&
354 D3DXVECTOR4::operator -= ( CONST D3DXVECTOR4& v )
355 {
356 x -= v.x;
357 y -= v.y;
358 z -= v.z;
359 w -= v.w;
360 return *this;
361 }
362
363 D3DXINLINE D3DXVECTOR4&
364 D3DXVECTOR4::operator *= ( FLOAT f )
365 {
366 x *= f;
367 y *= f;
368 z *= f;
369 w *= f;
370 return *this;
371 }
372
373 D3DXINLINE D3DXVECTOR4&
374 D3DXVECTOR4::operator /= ( FLOAT f )
375 {
376 FLOAT fInv = 1.0f / f;
377 x *= fInv;
378 y *= fInv;
379 z *= fInv;
380 w *= fInv;
381 return *this;
382 }
383
384
385 // unary operators
386 D3DXINLINE D3DXVECTOR4
387 D3DXVECTOR4::operator + () const
388 {
389 return *this;
390 }
391
392 D3DXINLINE D3DXVECTOR4
393 D3DXVECTOR4::operator - () const
394 {
395 return D3DXVECTOR4(-x, -y, -z, -w);
396 }
397
398
399 // binary operators
400 D3DXINLINE D3DXVECTOR4
401 D3DXVECTOR4::operator + ( CONST D3DXVECTOR4& v ) const
402 {
403 return D3DXVECTOR4(x + v.x, y + v.y, z + v.z, w + v.w);
404 }
405
406 D3DXINLINE D3DXVECTOR4
407 D3DXVECTOR4::operator - ( CONST D3DXVECTOR4& v ) const
408 {
409 return D3DXVECTOR4(x - v.x, y - v.y, z - v.z, w - v.w);
410 }
411
412 D3DXINLINE D3DXVECTOR4
413 D3DXVECTOR4::operator * ( FLOAT f ) const
414 {
415 return D3DXVECTOR4(x * f, y * f, z * f, w * f);
416 }
417
418 D3DXINLINE D3DXVECTOR4
419 D3DXVECTOR4::operator / ( FLOAT f ) const
420 {
421 FLOAT fInv = 1.0f / f;
422 return D3DXVECTOR4(x * fInv, y * fInv, z * fInv, w * fInv);
423 }
424
425
426 D3DXINLINE D3DXVECTOR4
427 operator * ( FLOAT f, CONST D3DXVECTOR4& v )
428 {
429 return D3DXVECTOR4(f * v.x, f * v.y, f * v.z, f * v.w);
430 }
431
432
433 D3DXINLINE BOOL
434 D3DXVECTOR4::operator == ( CONST D3DXVECTOR4& v ) const
435 {
436 return x == v.x && y == v.y && z == v.z && w == v.w;
437 }
438
439 D3DXINLINE BOOL
440 D3DXVECTOR4::operator != ( CONST D3DXVECTOR4& v ) const
441 {
442 return x != v.x || y != v.y || z != v.z || w != v.w;
443 }
444
445
446 //--------------------------
447 // Matrix
448 //--------------------------
449 D3DXINLINE
450 D3DXMATRIX::D3DXMATRIX( CONST FLOAT* pf )
451 {
452 #ifdef D3DX_DEBUG
453 if(!pf)
454 return;
455 #endif
456
457 memcpy(&_11, pf, sizeof(D3DXMATRIX));
458 }
459
460 D3DXINLINE
461 D3DXMATRIX::D3DXMATRIX( CONST D3DMATRIX& mat )
462 {
463 memcpy(&_11, &mat, sizeof(D3DXMATRIX));
464 }
465
466 D3DXINLINE
467 D3DXMATRIX::D3DXMATRIX( FLOAT f11, FLOAT f12, FLOAT f13, FLOAT f14,
468 FLOAT f21, FLOAT f22, FLOAT f23, FLOAT f24,
469 FLOAT f31, FLOAT f32, FLOAT f33, FLOAT f34,
470 FLOAT f41, FLOAT f42, FLOAT f43, FLOAT f44 )
471 {
472 _11 = f11; _12 = f12; _13 = f13; _14 = f14;
473 _21 = f21; _22 = f22; _23 = f23; _24 = f24;
474 _31 = f31; _32 = f32; _33 = f33; _34 = f34;
475 _41 = f41; _42 = f42; _43 = f43; _44 = f44;
476 }
477
478
479
480 // access grants
481 D3DXINLINE FLOAT&
482 D3DXMATRIX::operator () ( UINT iRow, UINT iCol )
483 {
484 return m[iRow][iCol];
485 }
486
487 D3DXINLINE FLOAT
488 D3DXMATRIX::operator () ( UINT iRow, UINT iCol ) const
489 {
490 return m[iRow][iCol];
491 }
492
493
494 // casting operators
495 D3DXINLINE
496 D3DXMATRIX::operator FLOAT* ()
497 {
498 return (FLOAT *) &_11;
499 }
500
501 D3DXINLINE
502 D3DXMATRIX::operator CONST FLOAT* () const
503 {
504 return (CONST FLOAT *) &_11;
505 }
506
507
508 // assignment operators
509 D3DXINLINE D3DXMATRIX&
510 D3DXMATRIX::operator *= ( CONST D3DXMATRIX& mat )
511 {
512 D3DXMatrixMultiply(this, this, &mat);
513 return *this;
514 }
515
516 D3DXINLINE D3DXMATRIX&
517 D3DXMATRIX::operator += ( CONST D3DXMATRIX& mat )
518 {
519 _11 += mat._11; _12 += mat._12; _13 += mat._13; _14 += mat._14;
520 _21 += mat._21; _22 += mat._22; _23 += mat._23; _24 += mat._24;
521 _31 += mat._31; _32 += mat._32; _33 += mat._33; _34 += mat._34;
522 _41 += mat._41; _42 += mat._42; _43 += mat._43; _44 += mat._44;
523 return *this;
524 }
525
526 D3DXINLINE D3DXMATRIX&
527 D3DXMATRIX::operator -= ( CONST D3DXMATRIX& mat )
528 {
529 _11 -= mat._11; _12 -= mat._12; _13 -= mat._13; _14 -= mat._14;
530 _21 -= mat._21; _22 -= mat._22; _23 -= mat._23; _24 -= mat._24;
531 _31 -= mat._31; _32 -= mat._32; _33 -= mat._33; _34 -= mat._34;
532 _41 -= mat._41; _42 -= mat._42; _43 -= mat._43; _44 -= mat._44;
533 return *this;
534 }
535
536 D3DXINLINE D3DXMATRIX&
537 D3DXMATRIX::operator *= ( FLOAT f )
538 {
539 _11 *= f; _12 *= f; _13 *= f; _14 *= f;
540 _21 *= f; _22 *= f; _23 *= f; _24 *= f;
541 _31 *= f; _32 *= f; _33 *= f; _34 *= f;
542 _41 *= f; _42 *= f; _43 *= f; _44 *= f;
543 return *this;
544 }
545
546 D3DXINLINE D3DXMATRIX&
547 D3DXMATRIX::operator /= ( FLOAT f )
548 {
549 FLOAT fInv = 1.0f / f;
550 _11 *= fInv; _12 *= fInv; _13 *= fInv; _14 *= fInv;
551 _21 *= fInv; _22 *= fInv; _23 *= fInv; _24 *= fInv;
552 _31 *= fInv; _32 *= fInv; _33 *= fInv; _34 *= fInv;
553 _41 *= fInv; _42 *= fInv; _43 *= fInv; _44 *= fInv;
554 return *this;
555 }
556
557
558 // unary operators
559 D3DXINLINE D3DXMATRIX
560 D3DXMATRIX::operator + () const
561 {
562 return *this;
563 }
564
565 D3DXINLINE D3DXMATRIX
566 D3DXMATRIX::operator - () const
567 {
568 return D3DXMATRIX(-_11, -_12, -_13, -_14,
569 -_21, -_22, -_23, -_24,
570 -_31, -_32, -_33, -_34,
571 -_41, -_42, -_43, -_44);
572 }
573
574
575 // binary operators
576 D3DXINLINE D3DXMATRIX
577 D3DXMATRIX::operator * ( CONST D3DXMATRIX& mat ) const
578 {
579 D3DXMATRIX matT;
580 D3DXMatrixMultiply(&matT, this, &mat);
581 return matT;
582 }
583
584 D3DXINLINE D3DXMATRIX
585 D3DXMATRIX::operator + ( CONST D3DXMATRIX& mat ) const
586 {
587 return D3DXMATRIX(_11 + mat._11, _12 + mat._12, _13 + mat._13, _14 + mat._14,
588 _21 + mat._21, _22 + mat._22, _23 + mat._23, _24 + mat._24,
589 _31 + mat._31, _32 + mat._32, _33 + mat._33, _34 + mat._34,
590 _41 + mat._41, _42 + mat._42, _43 + mat._43, _44 + mat._44);
591 }
592
593 D3DXINLINE D3DXMATRIX
594 D3DXMATRIX::operator - ( CONST D3DXMATRIX& mat ) const
595 {
596 return D3DXMATRIX(_11 - mat._11, _12 - mat._12, _13 - mat._13, _14 - mat._14,
597 _21 - mat._21, _22 - mat._22, _23 - mat._23, _24 - mat._24,
598 _31 - mat._31, _32 - mat._32, _33 - mat._33, _34 - mat._34,
599 _41 - mat._41, _42 - mat._42, _43 - mat._43, _44 - mat._44);
600 }
601
602 D3DXINLINE D3DXMATRIX
603 D3DXMATRIX::operator * ( FLOAT f ) const
604 {
605 return D3DXMATRIX(_11 * f, _12 * f, _13 * f, _14 * f,
606 _21 * f, _22 * f, _23 * f, _24 * f,
607 _31 * f, _32 * f, _33 * f, _34 * f,
608 _41 * f, _42 * f, _43 * f, _44 * f);
609 }
610
611 D3DXINLINE D3DXMATRIX
612 D3DXMATRIX::operator / ( FLOAT f ) const
613 {
614 FLOAT fInv = 1.0f / f;
615 return D3DXMATRIX(_11 * fInv, _12 * fInv, _13 * fInv, _14 * fInv,
616 _21 * fInv, _22 * fInv, _23 * fInv, _24 * fInv,
617 _31 * fInv, _32 * fInv, _33 * fInv, _34 * fInv,
618 _41 * fInv, _42 * fInv, _43 * fInv, _44 * fInv);
619 }
620
621
622 D3DXINLINE D3DXMATRIX
623 operator * ( FLOAT f, CONST D3DXMATRIX& mat )
624 {
625 return D3DXMATRIX(f * mat._11, f * mat._12, f * mat._13, f * mat._14,
626 f * mat._21, f * mat._22, f * mat._23, f * mat._24,
627 f * mat._31, f * mat._32, f * mat._33, f * mat._34,
628 f * mat._41, f * mat._42, f * mat._43, f * mat._44);
629 }
630
631
632 D3DXINLINE BOOL
633 D3DXMATRIX::operator == ( CONST D3DXMATRIX& mat ) const
634 {
635 return 0 == memcmp(this, &mat, sizeof(D3DXMATRIX));
636 }
637
638 D3DXINLINE BOOL
639 D3DXMATRIX::operator != ( CONST D3DXMATRIX& mat ) const
640 {
641 return 0 != memcmp(this, &mat, sizeof(D3DXMATRIX));
642 }
643
644
645
646 //--------------------------
647 // Quaternion
648 //--------------------------
649
650 D3DXINLINE
651 D3DXQUATERNION::D3DXQUATERNION( CONST FLOAT* pf )
652 {
653 #ifdef D3DX_DEBUG
654 if(!pf)
655 return;
656 #endif
657
658 x = pf[0];
659 y = pf[1];
660 z = pf[2];
661 w = pf[3];
662 }
663
664 D3DXINLINE
665 D3DXQUATERNION::D3DXQUATERNION( FLOAT fx, FLOAT fy, FLOAT fz, FLOAT fw )
666 {
667 x = fx;
668 y = fy;
669 z = fz;
670 w = fw;
671 }
672
673
674 // casting
675 D3DXINLINE
676 D3DXQUATERNION::operator FLOAT* ()
677 {
678 return (FLOAT *) &x;
679 }
680
681 D3DXINLINE
682 D3DXQUATERNION::operator CONST FLOAT* () const
683 {
684 return (CONST FLOAT *) &x;
685 }
686
687
688 // assignment operators
689 D3DXINLINE D3DXQUATERNION&
690 D3DXQUATERNION::operator += ( CONST D3DXQUATERNION& q )
691 {
692 x += q.x;
693 y += q.y;
694 z += q.z;
695 w += q.w;
696 return *this;
697 }
698
699 D3DXINLINE D3DXQUATERNION&
700 D3DXQUATERNION::operator -= ( CONST D3DXQUATERNION& q )
701 {
702 x -= q.x;
703 y -= q.y;
704 z -= q.z;
705 w -= q.w;
706 return *this;
707 }
708
709 D3DXINLINE D3DXQUATERNION&
710 D3DXQUATERNION::operator *= ( CONST D3DXQUATERNION& q )
711 {
712 D3DXQuaternionMultiply(this, this, &q);
713 return *this;
714 }
715
716 D3DXINLINE D3DXQUATERNION&
717 D3DXQUATERNION::operator *= ( FLOAT f )
718 {
719 x *= f;
720 y *= f;
721 z *= f;
722 w *= f;
723 return *this;
724 }
725
726 D3DXINLINE D3DXQUATERNION&
727 D3DXQUATERNION::operator /= ( FLOAT f )
728 {
729 FLOAT fInv = 1.0f / f;
730 x *= fInv;
731 y *= fInv;
732 z *= fInv;
733 w *= fInv;
734 return *this;
735 }
736
737
738 // unary operators
739 D3DXINLINE D3DXQUATERNION
740 D3DXQUATERNION::operator + () const
741 {
742 return *this;
743 }
744
745 D3DXINLINE D3DXQUATERNION
746 D3DXQUATERNION::operator - () const
747 {
748 return D3DXQUATERNION(-x, -y, -z, -w);
749 }
750
751
752 // binary operators
753 D3DXINLINE D3DXQUATERNION
754 D3DXQUATERNION::operator + ( CONST D3DXQUATERNION& q ) const
755 {
756 return D3DXQUATERNION(x + q.x, y + q.y, z + q.z, w + q.w);
757 }
758
759 D3DXINLINE D3DXQUATERNION
760 D3DXQUATERNION::operator - ( CONST D3DXQUATERNION& q ) const
761 {
762 return D3DXQUATERNION(x - q.x, y - q.y, z - q.z, w - q.w);
763 }
764
765 D3DXINLINE D3DXQUATERNION
766 D3DXQUATERNION::operator * ( CONST D3DXQUATERNION& q ) const
767 {
768 D3DXQUATERNION qT;
769 D3DXQuaternionMultiply(&qT, this, &q);
770 return qT;
771 }
772
773 D3DXINLINE D3DXQUATERNION
774 D3DXQUATERNION::operator * ( FLOAT f ) const
775 {
776 return D3DXQUATERNION(x * f, y * f, z * f, w * f);
777 }
778
779 D3DXINLINE D3DXQUATERNION
780 D3DXQUATERNION::operator / ( FLOAT f ) const
781 {
782 FLOAT fInv = 1.0f / f;
783 return D3DXQUATERNION(x * fInv, y * fInv, z * fInv, w * fInv);
784 }
785
786
787 D3DXINLINE D3DXQUATERNION
788 operator * (FLOAT f, CONST D3DXQUATERNION& q )
789 {
790 return D3DXQUATERNION(f * q.x, f * q.y, f * q.z, f * q.w);
791 }
792
793
794 D3DXINLINE BOOL
795 D3DXQUATERNION::operator == ( CONST D3DXQUATERNION& q ) const
796 {
797 return x == q.x && y == q.y && z == q.z && w == q.w;
798 }
799
800 D3DXINLINE BOOL
801 D3DXQUATERNION::operator != ( CONST D3DXQUATERNION& q ) const
802 {
803 return x != q.x || y != q.y || z != q.z || w != q.w;
804 }
805
806
807
808 //--------------------------
809 // Plane
810 //--------------------------
811
812 D3DXINLINE
813 D3DXPLANE::D3DXPLANE( CONST FLOAT* pf )
814 {
815 #ifdef D3DX_DEBUG
816 if(!pf)
817 return;
818 #endif
819
820 a = pf[0];
821 b = pf[1];
822 c = pf[2];
823 d = pf[3];
824 }
825
826 D3DXINLINE
827 D3DXPLANE::D3DXPLANE( FLOAT fa, FLOAT fb, FLOAT fc, FLOAT fd )
828 {
829 a = fa;
830 b = fb;
831 c = fc;
832 d = fd;
833 }
834
835
836 // casting
837 D3DXINLINE
838 D3DXPLANE::operator FLOAT* ()
839 {
840 return (FLOAT *) &a;
841 }
842
843 D3DXINLINE
844 D3DXPLANE::operator CONST FLOAT* () const
845 {
846 return (CONST FLOAT *) &a;
847 }
848
849
850 // unary operators
851 D3DXINLINE D3DXPLANE
852 D3DXPLANE::operator + () const
853 {
854 return *this;
855 }
856
857 D3DXINLINE D3DXPLANE
858 D3DXPLANE::operator - () const
859 {
860 return D3DXPLANE(-a, -b, -c, -d);
861 }
862
863
864 // binary operators
865 D3DXINLINE BOOL
866 D3DXPLANE::operator == ( CONST D3DXPLANE& p ) const
867 {
868 return a == p.a && b == p.b && c == p.c && d == p.d;
869 }
870
871 D3DXINLINE BOOL
872 D3DXPLANE::operator != ( CONST D3DXPLANE& p ) const
873 {
874 return a != p.a || b != p.b || c != p.c || d != p.d;
875 }
876
877
878
879
880 //--------------------------
881 // Color
882 //--------------------------
883
884 D3DXINLINE
885 D3DXCOLOR::D3DXCOLOR( DWORD dw )
886 {
887 CONST FLOAT f = 1.0f / 255.0f;
888 r = f * (FLOAT) (unsigned char) (dw >> 16);
889 g = f * (FLOAT) (unsigned char) (dw >> 8);
890 b = f * (FLOAT) (unsigned char) (dw >> 0);
891 a = f * (FLOAT) (unsigned char) (dw >> 24);
892 }
893
894 D3DXINLINE
895 D3DXCOLOR::D3DXCOLOR( CONST FLOAT* pf )
896 {
897 #ifdef D3DX_DEBUG
898 if(!pf)
899 return;
900 #endif
901
902 r = pf[0];
903 g = pf[1];
904 b = pf[2];
905 a = pf[3];
906 }
907
908 D3DXINLINE
909 D3DXCOLOR::D3DXCOLOR( CONST D3DCOLORVALUE& c )
910 {
911 r = c.r;
912 g = c.g;
913 b = c.b;
914 a = c.a;
915 }
916
917 D3DXINLINE
918 D3DXCOLOR::D3DXCOLOR( FLOAT fr, FLOAT fg, FLOAT fb, FLOAT fa )
919 {
920 r = fr;
921 g = fg;
922 b = fb;
923 a = fa;
924 }
925
926
927 // casting
928 D3DXINLINE
929 D3DXCOLOR::operator DWORD () const
930 {
931 DWORD dwR = r >= 1.0f ? 0xff : r <= 0.0f ? 0x00 : (DWORD) (r * 255.0f + 0.5f);
932 DWORD dwG = g >= 1.0f ? 0xff : g <= 0.0f ? 0x00 : (DWORD) (g * 255.0f + 0.5f);
933 DWORD dwB = b >= 1.0f ? 0xff : b <= 0.0f ? 0x00 : (DWORD) (b * 255.0f + 0.5f);
934 DWORD dwA = a >= 1.0f ? 0xff : a <= 0.0f ? 0x00 : (DWORD) (a * 255.0f + 0.5f);
935
936 return (dwA << 24) | (dwR << 16) | (dwG << 8) | dwB;
937 }
938
939
940 D3DXINLINE
941 D3DXCOLOR::operator FLOAT * ()
942 {
943 return (FLOAT *) &r;
944 }
945
946 D3DXINLINE
947 D3DXCOLOR::operator CONST FLOAT * () const
948 {
949 return (CONST FLOAT *) &r;
950 }
951
952
953 D3DXINLINE
954 D3DXCOLOR::operator D3DCOLORVALUE * ()
955 {
956 return (D3DCOLORVALUE *) &r;
957 }
958
959 D3DXINLINE
960 D3DXCOLOR::operator CONST D3DCOLORVALUE * () const
961 {
962 return (CONST D3DCOLORVALUE *) &r;
963 }
964
965
966 D3DXINLINE
967 D3DXCOLOR::operator D3DCOLORVALUE& ()
968 {
969 return *((D3DCOLORVALUE *) &r);
970 }
971
972 D3DXINLINE
973 D3DXCOLOR::operator CONST D3DCOLORVALUE& () const
974 {
975 return *((CONST D3DCOLORVALUE *) &r);
976 }
977
978
979 // assignment operators
980 D3DXINLINE D3DXCOLOR&
981 D3DXCOLOR::operator += ( CONST D3DXCOLOR& c )
982 {
983 r += c.r;
984 g += c.g;
985 b += c.b;
986 a += c.a;
987 return *this;
988 }
989
990 D3DXINLINE D3DXCOLOR&
991 D3DXCOLOR::operator -= ( CONST D3DXCOLOR& c )
992 {
993 r -= c.r;
994 g -= c.g;
995 b -= c.b;
996 a -= c.a;
997 return *this;
998 }
999
1000 D3DXINLINE D3DXCOLOR&
1001 D3DXCOLOR::operator *= ( FLOAT f )
1002 {
1003 r *= f;
1004 g *= f;
1005 b *= f;
1006 a *= f;
1007 return *this;
1008 }
1009
1010 D3DXINLINE D3DXCOLOR&
1011 D3DXCOLOR::operator /= ( FLOAT f )
1012 {
1013 FLOAT fInv = 1.0f / f;
1014 r *= fInv;
1015 g *= fInv;
1016 b *= fInv;
1017 a *= fInv;
1018 return *this;
1019 }
1020
1021
1022 // unary operators
1023 D3DXINLINE D3DXCOLOR
1024 D3DXCOLOR::operator + () const
1025 {
1026 return *this;
1027 }
1028
1029 D3DXINLINE D3DXCOLOR
1030 D3DXCOLOR::operator - () const
1031 {
1032 return D3DXCOLOR(-r, -g, -b, -a);
1033 }
1034
1035
1036 // binary operators
1037 D3DXINLINE D3DXCOLOR
1038 D3DXCOLOR::operator + ( CONST D3DXCOLOR& c ) const
1039 {
1040 return D3DXCOLOR(r + c.r, g + c.g, b + c.b, a + c.a);
1041 }
1042
1043 D3DXINLINE D3DXCOLOR
1044 D3DXCOLOR::operator - ( CONST D3DXCOLOR& c ) const
1045 {
1046 return D3DXCOLOR(r - c.r, g - c.g, b - c.b, a - c.a);
1047 }
1048
1049 D3DXINLINE D3DXCOLOR
1050 D3DXCOLOR::operator * ( FLOAT f ) const
1051 {
1052 return D3DXCOLOR(r * f, g * f, b * f, a * f);
1053 }
1054
1055 D3DXINLINE D3DXCOLOR
1056 D3DXCOLOR::operator / ( FLOAT f ) const
1057 {
1058 FLOAT fInv = 1.0f / f;
1059 return D3DXCOLOR(r * fInv, g * fInv, b * fInv, a * fInv);
1060 }
1061
1062
1063 D3DXINLINE D3DXCOLOR
1064 operator * (FLOAT f, CONST D3DXCOLOR& c )
1065 {
1066 return D3DXCOLOR(f * c.r, f * c.g, f * c.b, f * c.a);
1067 }
1068
1069
1070 D3DXINLINE BOOL
1071 D3DXCOLOR::operator == ( CONST D3DXCOLOR& c ) const
1072 {
1073 return r == c.r && g == c.g && b == c.b && a == c.a;
1074 }
1075
1076 D3DXINLINE BOOL
1077 D3DXCOLOR::operator != ( CONST D3DXCOLOR& c ) const
1078 {
1079 return r != c.r || g != c.g || b != c.b || a != c.a;
1080 }
1081
1082
1083 #endif //__cplusplus
1084
1085
1086
1087 //===========================================================================
1088 //
1089 // Inline functions
1090 //
1091 //===========================================================================
1092
1093
1094 //--------------------------
1095 // 2D Vector
1096 //--------------------------
1097
1098 D3DXINLINE FLOAT D3DXVec2Length
1099 ( CONST D3DXVECTOR2 *pV )
1100 {
1101 #ifdef D3DX_DEBUG
1102 if(!pV)
1103 return 0.0f;
1104 #endif
1105
1106 #ifdef __cplusplus
1107 return sqrtf(pV->x * pV->x + pV->y * pV->y);
1108 #else
1109 return (FLOAT) sqrt(pV->x * pV->x + pV->y * pV->y);
1110 #endif
1111 }
1112
1113 D3DXINLINE FLOAT D3DXVec2LengthSq
1114 ( CONST D3DXVECTOR2 *pV )
1115 {
1116 #ifdef D3DX_DEBUG
1117 if(!pV)
1118 return 0.0f;
1119 #endif
1120
1121 return pV->x * pV->x + pV->y * pV->y;
1122 }
1123
1124 D3DXINLINE FLOAT D3DXVec2Dot
1125 ( CONST D3DXVECTOR2 *pV1, CONST D3DXVECTOR2 *pV2 )
1126 {
1127 #ifdef D3DX_DEBUG
1128 if(!pV1 || !pV2)
1129 return 0.0f;
1130 #endif
1131
1132 return pV1->x * pV2->x + pV1->y * pV2->y;
1133 }
1134
1135 D3DXINLINE FLOAT D3DXVec2CCW
1136 ( CONST D3DXVECTOR2 *pV1, CONST D3DXVECTOR2 *pV2 )
1137 {
1138 #ifdef D3DX_DEBUG
1139 if(!pV1 || !pV2)
1140 return 0.0f;
1141 #endif
1142
1143 return pV1->x * pV2->y - pV1->y * pV2->x;
1144 }
1145
1146 D3DXINLINE D3DXVECTOR2* D3DXVec2Add
1147 ( D3DXVECTOR2 *pOut, CONST D3DXVECTOR2 *pV1, CONST D3DXVECTOR2 *pV2 )
1148 {
1149 #ifdef D3DX_DEBUG
1150 if(!pOut || !pV1 || !pV2)
1151 return NULL;
1152 #endif
1153
1154 pOut->x = pV1->x + pV2->x;
1155 pOut->y = pV1->y + pV2->y;
1156 return pOut;
1157 }
1158
1159 D3DXINLINE D3DXVECTOR2* D3DXVec2Subtract
1160 ( D3DXVECTOR2 *pOut, CONST D3DXVECTOR2 *pV1, CONST D3DXVECTOR2 *pV2 )
1161 {
1162 #ifdef D3DX_DEBUG
1163 if(!pOut || !pV1 || !pV2)
1164 return NULL;
1165 #endif
1166
1167 pOut->x = pV1->x - pV2->x;
1168 pOut->y = pV1->y - pV2->y;
1169 return pOut;
1170 }
1171
1172 D3DXINLINE D3DXVECTOR2* D3DXVec2Minimize
1173 ( D3DXVECTOR2 *pOut, CONST D3DXVECTOR2 *pV1, CONST D3DXVECTOR2 *pV2 )
1174 {
1175 #ifdef D3DX_DEBUG
1176 if(!pOut || !pV1 || !pV2)
1177 return NULL;
1178 #endif
1179
1180 pOut->x = pV1->x < pV2->x ? pV1->x : pV2->x;
1181 pOut->y = pV1->y < pV2->y ? pV1->y : pV2->y;
1182 return pOut;
1183 }
1184
1185 D3DXINLINE D3DXVECTOR2* D3DXVec2Maximize
1186 ( D3DXVECTOR2 *pOut, CONST D3DXVECTOR2 *pV1, CONST D3DXVECTOR2 *pV2 )
1187 {
1188 #ifdef D3DX_DEBUG
1189 if(!pOut || !pV1 || !pV2)
1190 return NULL;
1191 #endif
1192
1193 pOut->x = pV1->x > pV2->x ? pV1->x : pV2->x;
1194 pOut->y = pV1->y > pV2->y ? pV1->y : pV2->y;
1195 return pOut;
1196 }
1197
1198 D3DXINLINE D3DXVECTOR2* D3DXVec2Scale
1199 ( D3DXVECTOR2 *pOut, CONST D3DXVECTOR2 *pV, FLOAT s )
1200 {
1201 #ifdef D3DX_DEBUG
1202 if(!pOut || !pV)
1203 return NULL;
1204 #endif
1205
1206 pOut->x = pV->x * s;
1207 pOut->y = pV->y * s;
1208 return pOut;
1209 }
1210
1211 D3DXINLINE D3DXVECTOR2* D3DXVec2Lerp
1212 ( D3DXVECTOR2 *pOut, CONST D3DXVECTOR2 *pV1, CONST D3DXVECTOR2 *pV2,
1213 FLOAT s )
1214 {
1215 #ifdef D3DX_DEBUG
1216 if(!pOut || !pV1 || !pV2)
1217 return NULL;
1218 #endif
1219
1220 pOut->x = pV1->x + s * (pV2->x - pV1->x);
1221 pOut->y = pV1->y + s * (pV2->y - pV1->y);
1222 return pOut;
1223 }
1224
1225
1226 //--------------------------
1227 // 3D Vector
1228 //--------------------------
1229
1230 D3DXINLINE FLOAT D3DXVec3Length
1231 ( CONST D3DXVECTOR3 *pV )
1232 {
1233 #ifdef D3DX_DEBUG
1234 if(!pV)
1235 return 0.0f;
1236 #endif
1237
1238 #ifdef __cplusplus
1239 return sqrtf(pV->x * pV->x + pV->y * pV->y + pV->z * pV->z);
1240 #else
1241 return (FLOAT) sqrt(pV->x * pV->x + pV->y * pV->y + pV->z * pV->z);
1242 #endif
1243 }
1244
1245 D3DXINLINE FLOAT D3DXVec3LengthSq
1246 ( CONST D3DXVECTOR3 *pV )
1247 {
1248 #ifdef D3DX_DEBUG
1249 if(!pV)
1250 return 0.0f;
1251 #endif
1252
1253 return pV->x * pV->x + pV->y * pV->y + pV->z * pV->z;
1254 }
1255
1256 D3DXINLINE FLOAT D3DXVec3Dot
1257 ( CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2 )
1258 {
1259 #ifdef D3DX_DEBUG
1260 if(!pV1 || !pV2)
1261 return 0.0f;
1262 #endif
1263
1264 return pV1->x * pV2->x + pV1->y * pV2->y + pV1->z * pV2->z;
1265 }
1266
1267 D3DXINLINE D3DXVECTOR3* D3DXVec3Cross
1268 ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2 )
1269 {
1270 D3DXVECTOR3 v;
1271
1272 #ifdef D3DX_DEBUG
1273 if(!pOut || !pV1 || !pV2)
1274 return NULL;
1275 #endif
1276
1277 v.x = pV1->y * pV2->z - pV1->z * pV2->y;
1278 v.y = pV1->z * pV2->x - pV1->x * pV2->z;
1279 v.z = pV1->x * pV2->y - pV1->y * pV2->x;
1280
1281 *pOut = v;
1282 return pOut;
1283 }
1284
1285 D3DXINLINE D3DXVECTOR3* D3DXVec3Add
1286 ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2 )
1287 {
1288 #ifdef D3DX_DEBUG
1289 if(!pOut || !pV1 || !pV2)
1290 return NULL;
1291 #endif
1292
1293 pOut->x = pV1->x + pV2->x;
1294 pOut->y = pV1->y + pV2->y;
1295 pOut->z = pV1->z + pV2->z;
1296 return pOut;
1297 }
1298
1299 D3DXINLINE D3DXVECTOR3* D3DXVec3Subtract
1300 ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2 )
1301 {
1302 #ifdef D3DX_DEBUG
1303 if(!pOut || !pV1 || !pV2)
1304 return NULL;
1305 #endif
1306
1307 pOut->x = pV1->x - pV2->x;
1308 pOut->y = pV1->y - pV2->y;
1309 pOut->z = pV1->z - pV2->z;
1310 return pOut;
1311 }
1312
1313 D3DXINLINE D3DXVECTOR3* D3DXVec3Minimize
1314 ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2 )
1315 {
1316 #ifdef D3DX_DEBUG
1317 if(!pOut || !pV1 || !pV2)
1318 return NULL;
1319 #endif
1320
1321 pOut->x = pV1->x < pV2->x ? pV1->x : pV2->x;
1322 pOut->y = pV1->y < pV2->y ? pV1->y : pV2->y;
1323 pOut->z = pV1->z < pV2->z ? pV1->z : pV2->z;
1324 return pOut;
1325 }
1326
1327 D3DXINLINE D3DXVECTOR3* D3DXVec3Maximize
1328 ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2 )
1329 {
1330 #ifdef D3DX_DEBUG
1331 if(!pOut || !pV1 || !pV2)
1332 return NULL;
1333 #endif
1334
1335 pOut->x = pV1->x > pV2->x ? pV1->x : pV2->x;
1336 pOut->y = pV1->y > pV2->y ? pV1->y : pV2->y;
1337 pOut->z = pV1->z > pV2->z ? pV1->z : pV2->z;
1338 return pOut;
1339 }
1340
1341 D3DXINLINE D3DXVECTOR3* D3DXVec3Scale
1342 ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV, FLOAT s)
1343 {
1344 #ifdef D3DX_DEBUG
1345 if(!pOut || !pV)
1346 return NULL;
1347 #endif
1348
1349 pOut->x = pV->x * s;
1350 pOut->y = pV->y * s;
1351 pOut->z = pV->z * s;
1352 return pOut;
1353 }
1354
1355 D3DXINLINE D3DXVECTOR3* D3DXVec3Lerp
1356 ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2,
1357 FLOAT s )
1358 {
1359 #ifdef D3DX_DEBUG
1360 if(!pOut || !pV1 || !pV2)
1361 return NULL;
1362 #endif
1363
1364 pOut->x = pV1->x + s * (pV2->x - pV1->x);
1365 pOut->y = pV1->y + s * (pV2->y - pV1->y);
1366 pOut->z = pV1->z + s * (pV2->z - pV1->z);
1367 return pOut;
1368 }
1369
1370
1371 //--------------------------
1372 // 4D Vector
1373 //--------------------------
1374
1375 D3DXINLINE FLOAT D3DXVec4Length
1376 ( CONST D3DXVECTOR4 *pV )
1377 {
1378 #ifdef D3DX_DEBUG
1379 if(!pV)
1380 return 0.0f;
1381 #endif
1382
1383 #ifdef __cplusplus
1384 return sqrtf(pV->x * pV->x + pV->y * pV->y + pV->z * pV->z + pV->w * pV->w);
1385 #else
1386 return (FLOAT) sqrt(pV->x * pV->x + pV->y * pV->y + pV->z * pV->z + pV->w * pV->w);
1387 #endif
1388 }
1389
1390 D3DXINLINE FLOAT D3DXVec4LengthSq
1391 ( CONST D3DXVECTOR4 *pV )
1392 {
1393 #ifdef D3DX_DEBUG
1394 if(!pV)
1395 return 0.0f;
1396 #endif
1397
1398 return pV->x * pV->x + pV->y * pV->y + pV->z * pV->z + pV->w * pV->w;
1399 }
1400
1401 D3DXINLINE FLOAT D3DXVec4Dot
1402 ( CONST D3DXVECTOR4 *pV1, CONST D3DXVECTOR4 *pV2 )
1403 {
1404 #ifdef D3DX_DEBUG
1405 if(!pV1 || !pV2)
1406 return 0.0f;
1407 #endif
1408
1409 return pV1->x * pV2->x + pV1->y * pV2->y + pV1->z * pV2->z + pV1->w * pV2->w;
1410 }
1411
1412 D3DXINLINE D3DXVECTOR4* D3DXVec4Add
1413 ( D3DXVECTOR4 *pOut, CONST D3DXVECTOR4 *pV1, CONST D3DXVECTOR4 *pV2)
1414 {
1415 #ifdef D3DX_DEBUG
1416 if(!pOut || !pV1 || !pV2)
1417 return NULL;
1418 #endif
1419
1420 pOut->x = pV1->x + pV2->x;
1421 pOut->y = pV1->y + pV2->y;
1422 pOut->z = pV1->z + pV2->z;
1423 pOut->w = pV1->w + pV2->w;
1424 return pOut;
1425 }
1426
1427 D3DXINLINE D3DXVECTOR4* D3DXVec4Subtract
1428 ( D3DXVECTOR4 *pOut, CONST D3DXVECTOR4 *pV1, CONST D3DXVECTOR4 *pV2)
1429 {
1430 #ifdef D3DX_DEBUG
1431 if(!pOut || !pV1 || !pV2)
1432 return NULL;
1433 #endif
1434
1435 pOut->x = pV1->x - pV2->x;
1436 pOut->y = pV1->y - pV2->y;
1437 pOut->z = pV1->z - pV2->z;
1438 pOut->w = pV1->w - pV2->w;
1439 return pOut;
1440 }
1441
1442 D3DXINLINE D3DXVECTOR4* D3DXVec4Minimize
1443 ( D3DXVECTOR4 *pOut, CONST D3DXVECTOR4 *pV1, CONST D3DXVECTOR4 *pV2)
1444 {
1445 #ifdef D3DX_DEBUG
1446 if(!pOut || !pV1 || !pV2)
1447 return NULL;
1448 #endif
1449
1450 pOut->x = pV1->x < pV2->x ? pV1->x : pV2->x;
1451 pOut->y = pV1->y < pV2->y ? pV1->y : pV2->y;
1452 pOut->z = pV1->z < pV2->z ? pV1->z : pV2->z;
1453 pOut->w = pV1->w < pV2->w ? pV1->w : pV2->w;
1454 return pOut;
1455 }
1456
1457 D3DXINLINE D3DXVECTOR4* D3DXVec4Maximize
1458 ( D3DXVECTOR4 *pOut, CONST D3DXVECTOR4 *pV1, CONST D3DXVECTOR4 *pV2)
1459 {
1460 #ifdef D3DX_DEBUG
1461 if(!pOut || !pV1 || !pV2)
1462 return NULL;
1463 #endif
1464
1465 pOut->x = pV1->x > pV2->x ? pV1->x : pV2->x;
1466 pOut->y = pV1->y > pV2->y ? pV1->y : pV2->y;
1467 pOut->z = pV1->z > pV2->z ? pV1->z : pV2->z;
1468 pOut->w = pV1->w > pV2->w ? pV1->w : pV2->w;
1469 return pOut;
1470 }
1471
1472 D3DXINLINE D3DXVECTOR4* D3DXVec4Scale
1473 ( D3DXVECTOR4 *pOut, CONST D3DXVECTOR4 *pV, FLOAT s)
1474 {
1475 #ifdef D3DX_DEBUG
1476 if(!pOut || !pV)
1477 return NULL;
1478 #endif
1479
1480 pOut->x = pV->x * s;
1481 pOut->y = pV->y * s;
1482 pOut->z = pV->z * s;
1483 pOut->w = pV->w * s;
1484 return pOut;
1485 }
1486
1487 D3DXINLINE D3DXVECTOR4* D3DXVec4Lerp
1488 ( D3DXVECTOR4 *pOut, CONST D3DXVECTOR4 *pV1, CONST D3DXVECTOR4 *pV2,
1489 FLOAT s )
1490 {
1491 #ifdef D3DX_DEBUG
1492 if(!pOut || !pV1 || !pV2)
1493 return NULL;
1494 #endif
1495
1496 pOut->x = pV1->x + s * (pV2->x - pV1->x);
1497 pOut->y = pV1->y + s * (pV2->y - pV1->y);
1498 pOut->z = pV1->z + s * (pV2->z - pV1->z);
1499 pOut->w = pV1->w + s * (pV2->w - pV1->w);
1500 return pOut;
1501 }
1502
1503
1504 //--------------------------
1505 // 4D Matrix
1506 //--------------------------
1507
1508 D3DXINLINE D3DXMATRIX* D3DXMatrixIdentity
1509 ( D3DXMATRIX *pOut )
1510 {
1511 #ifdef D3DX_DEBUG
1512 if(!pOut)
1513 return NULL;
1514 #endif
1515
1516 pOut->m[0][1] = pOut->m[0][2] = pOut->m[0][3] =
1517 pOut->m[1][0] = pOut->m[1][2] = pOut->m[1][3] =
1518 pOut->m[2][0] = pOut->m[2][1] = pOut->m[2][3] =
1519 pOut->m[3][0] = pOut->m[3][1] = pOut->m[3][2] = 0.0f;
1520
1521 pOut->m[0][0] = pOut->m[1][1] = pOut->m[2][2] = pOut->m[3][3] = 1.0f;
1522 return pOut;
1523 }
1524
1525
1526 D3DXINLINE BOOL D3DXMatrixIsIdentity
1527 ( CONST D3DXMATRIX *pM )
1528 {
1529 #ifdef D3DX_DEBUG
1530 if(!pM)
1531 return FALSE;
1532 #endif
1533
1534 return pM->m[0][0] == 1.0f && pM->m[0][1] == 0.0f && pM->m[0][2] == 0.0f && pM->m[0][3] == 0.0f &&
1535 pM->m[1][0] == 0.0f && pM->m[1][1] == 1.0f && pM->m[1][2] == 0.0f && pM->m[1][3] == 0.0f &&
1536 pM->m[2][0] == 0.0f && pM->m[2][1] == 0.0f && pM->m[2][2] == 1.0f && pM->m[2][3] == 0.0f &&
1537 pM->m[3][0] == 0.0f && pM->m[3][1] == 0.0f && pM->m[3][2] == 0.0f && pM->m[3][3] == 1.0f;
1538 }
1539
1540
1541 //--------------------------
1542 // Quaternion
1543 //--------------------------
1544
1545 D3DXINLINE FLOAT D3DXQuaternionLength
1546 ( CONST D3DXQUATERNION *pQ )
1547 {
1548 #ifdef D3DX_DEBUG
1549 if(!pQ)
1550 return 0.0f;
1551 #endif
1552
1553 #ifdef __cplusplus
1554 return sqrtf(pQ->x * pQ->x + pQ->y * pQ->y + pQ->z * pQ->z + pQ->w * pQ->w);
1555 #else
1556 return (FLOAT) sqrt(pQ->x * pQ->x + pQ->y * pQ->y + pQ->z * pQ->z + pQ->w * pQ->w);
1557 #endif
1558 }
1559
1560 D3DXINLINE FLOAT D3DXQuaternionLengthSq
1561 ( CONST D3DXQUATERNION *pQ )
1562 {
1563 #ifdef D3DX_DEBUG
1564 if(!pQ)
1565 return 0.0f;
1566 #endif
1567
1568 return pQ->x * pQ->x + pQ->y * pQ->y + pQ->z * pQ->z + pQ->w * pQ->w;
1569 }
1570
1571 D3DXINLINE FLOAT D3DXQuaternionDot
1572 ( CONST D3DXQUATERNION *pQ1, CONST D3DXQUATERNION *pQ2 )
1573 {
1574 #ifdef D3DX_DEBUG
1575 if(!pQ1 || !pQ2)
1576 return 0.0f;
1577 #endif
1578
1579 return pQ1->x * pQ2->x + pQ1->y * pQ2->y + pQ1->z * pQ2->z + pQ1->w * pQ2->w;
1580 }
1581
1582
1583 D3DXINLINE D3DXQUATERNION* D3DXQuaternionIdentity
1584 ( D3DXQUATERNION *pOut )
1585 {
1586 #ifdef D3DX_DEBUG
1587 if(!pOut)
1588 return NULL;
1589 #endif
1590
1591 pOut->x = pOut->y = pOut->z = 0.0f;
1592 pOut->w = 1.0f;
1593 return pOut;
1594 }
1595
1596 D3DXINLINE BOOL D3DXQuaternionIsIdentity
1597 ( CONST D3DXQUATERNION *pQ )
1598 {
1599 #ifdef D3DX_DEBUG
1600 if(!pQ)
1601 return FALSE;
1602 #endif
1603
1604 return pQ->x == 0.0f && pQ->y == 0.0f && pQ->z == 0.0f && pQ->w == 1.0f;
1605 }
1606
1607
1608 D3DXINLINE D3DXQUATERNION* D3DXQuaternionConjugate
1609 ( D3DXQUATERNION *pOut, CONST D3DXQUATERNION *pQ )
1610 {
1611 #ifdef D3DX_DEBUG
1612 if(!pOut || !pQ)
1613 return NULL;
1614 #endif
1615
1616 pOut->x = -pQ->x;
1617 pOut->y = -pQ->y;
1618 pOut->z = -pQ->z;
1619 pOut->w = pQ->w;
1620 return pOut;
1621 }
1622
1623
1624 //--------------------------
1625 // Plane
1626 //--------------------------
1627
1628 D3DXINLINE FLOAT D3DXPlaneDot
1629 ( CONST D3DXPLANE *pP, CONST D3DXVECTOR4 *pV)
1630 {
1631 #ifdef D3DX_DEBUG
1632 if(!pP || !pV)
1633 return 0.0f;
1634 #endif
1635
1636 return pP->a * pV->x + pP->b * pV->y + pP->c * pV->z + pP->d * pV->w;
1637 }
1638
1639 D3DXINLINE FLOAT D3DXPlaneDotCoord
1640 ( CONST D3DXPLANE *pP, CONST D3DXVECTOR3 *pV)
1641 {
1642 #ifdef D3DX_DEBUG
1643 if(!pP || !pV)
1644 return 0.0f;
1645 #endif
1646
1647 return pP->a * pV->x + pP->b * pV->y + pP->c * pV->z + pP->d;
1648 }
1649
1650 D3DXINLINE FLOAT D3DXPlaneDotNormal
1651 ( CONST D3DXPLANE *pP, CONST D3DXVECTOR3 *pV)
1652 {
1653 #ifdef D3DX_DEBUG
1654 if(!pP || !pV)
1655 return 0.0f;
1656 #endif
1657
1658 return pP->a * pV->x + pP->b * pV->y + pP->c * pV->z;
1659 }
1660
1661
1662 //--------------------------
1663 // Color
1664 //--------------------------
1665
1666 D3DXINLINE D3DXCOLOR* D3DXColorNegative
1667 (D3DXCOLOR *pOut, CONST D3DXCOLOR *pC)
1668 {
1669 #ifdef D3DX_DEBUG
1670 if(!pOut || !pC)
1671 return NULL;
1672 #endif
1673
1674 pOut->r = 1.0f - pC->r;
1675 pOut->g = 1.0f - pC->g;
1676 pOut->b = 1.0f - pC->b;
1677 pOut->a = pC->a;
1678 return pOut;
1679 }
1680
1681 D3DXINLINE D3DXCOLOR* D3DXColorAdd
1682 (D3DXCOLOR *pOut, CONST D3DXCOLOR *pC1, CONST D3DXCOLOR *pC2)
1683 {
1684 #ifdef D3DX_DEBUG
1685 if(!pOut || !pC1 || !pC2)
1686 return NULL;
1687 #endif
1688
1689 pOut->r = pC1->r + pC2->r;
1690 pOut->g = pC1->g + pC2->g;
1691 pOut->b = pC1->b + pC2->b;
1692 pOut->a = pC1->a + pC2->a;
1693 return pOut;
1694 }
1695
1696 D3DXINLINE D3DXCOLOR* D3DXColorSubtract
1697 (D3DXCOLOR *pOut, CONST D3DXCOLOR *pC1, CONST D3DXCOLOR *pC2)
1698 {
1699 #ifdef D3DX_DEBUG
1700 if(!pOut || !pC1 || !pC2)
1701 return NULL;
1702 #endif
1703
1704 pOut->r = pC1->r - pC2->r;
1705 pOut->g = pC1->g - pC2->g;
1706 pOut->b = pC1->b - pC2->b;
1707 pOut->a = pC1->a - pC2->a;
1708 return pOut;
1709 }
1710
1711 D3DXINLINE D3DXCOLOR* D3DXColorScale
1712 (D3DXCOLOR *pOut, CONST D3DXCOLOR *pC, FLOAT s)
1713 {
1714 #ifdef D3DX_DEBUG
1715 if(!pOut || !pC)
1716 return NULL;
1717 #endif
1718
1719 pOut->r = pC->r * s;
1720 pOut->g = pC->g * s;
1721 pOut->b = pC->b * s;
1722 pOut->a = pC->a * s;
1723 return pOut;
1724 }
1725
1726 D3DXINLINE D3DXCOLOR* D3DXColorModulate
1727 (D3DXCOLOR *pOut, CONST D3DXCOLOR *pC1, CONST D3DXCOLOR *pC2)
1728 {
1729 #ifdef D3DX_DEBUG
1730 if(!pOut || !pC1 || !pC2)
1731 return NULL;
1732 #endif
1733
1734 pOut->r = pC1->r * pC2->r;
1735 pOut->g = pC1->g * pC2->g;
1736 pOut->b = pC1->b * pC2->b;
1737 pOut->a = pC1->a * pC2->a;
1738 return pOut;
1739 }
1740
1741 D3DXINLINE D3DXCOLOR* D3DXColorLerp
1742 (D3DXCOLOR *pOut, CONST D3DXCOLOR *pC1, CONST D3DXCOLOR *pC2, FLOAT s)
1743 {
1744 #ifdef D3DX_DEBUG
1745 if(!pOut || !pC1 || !pC2)
1746 return NULL;
1747 #endif
1748
1749 pOut->r = pC1->r + s * (pC2->r - pC1->r);
1750 pOut->g = pC1->g + s * (pC2->g - pC1->g);
1751 pOut->b = pC1->b + s * (pC2->b - pC1->b);
1752 pOut->a = pC1->a + s * (pC2->a - pC1->a);
1753 return pOut;
1754 }
1755
1756
1757 #endif // __D3DX8MATH_INL__

root@recompile.se
ViewVC Help
Powered by ViewVC 1.1.26