diff options
Diffstat (limited to 'libraries/ode-0.9/OPCODE/Ice/IceHPoint.cpp')
-rw-r--r-- | libraries/ode-0.9/OPCODE/Ice/IceHPoint.cpp | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/libraries/ode-0.9/OPCODE/Ice/IceHPoint.cpp b/libraries/ode-0.9/OPCODE/Ice/IceHPoint.cpp new file mode 100644 index 0000000..f806a0c --- /dev/null +++ b/libraries/ode-0.9/OPCODE/Ice/IceHPoint.cpp | |||
@@ -0,0 +1,70 @@ | |||
1 | /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
2 | /** | ||
3 | * Contains code for homogeneous points. | ||
4 | * \file IceHPoint.cpp | ||
5 | * \author Pierre Terdiman | ||
6 | * \date April, 4, 2000 | ||
7 | */ | ||
8 | /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
9 | |||
10 | /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
11 | /** | ||
12 | * Homogeneous point. | ||
13 | * | ||
14 | * Use it: | ||
15 | * - for clipping in homogeneous space (standard way) | ||
16 | * - to differentiate between points (w=1) and vectors (w=0). | ||
17 | * - in some cases you can also use it instead of Point for padding reasons. | ||
18 | * | ||
19 | * \class HPoint | ||
20 | * \author Pierre Terdiman | ||
21 | * \version 1.0 | ||
22 | * \warning No cross-product in 4D. | ||
23 | * \warning HPoint *= Matrix3x3 doesn't exist, the matrix is first casted to a 4x4 | ||
24 | */ | ||
25 | /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
26 | |||
27 | /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
28 | // Precompiled Header | ||
29 | #include "Stdafx.h" | ||
30 | |||
31 | using namespace IceMaths; | ||
32 | |||
33 | /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
34 | // Point Mul = HPoint * Matrix3x3; | ||
35 | /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
36 | Point HPoint::operator*(const Matrix3x3& mat) const | ||
37 | { | ||
38 | return Point( | ||
39 | x * mat.m[0][0] + y * mat.m[1][0] + z * mat.m[2][0], | ||
40 | x * mat.m[0][1] + y * mat.m[1][1] + z * mat.m[2][1], | ||
41 | x * mat.m[0][2] + y * mat.m[1][2] + z * mat.m[2][2] ); | ||
42 | } | ||
43 | |||
44 | /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
45 | // HPoint Mul = HPoint * Matrix4x4; | ||
46 | /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
47 | HPoint HPoint::operator*(const Matrix4x4& mat) const | ||
48 | { | ||
49 | return HPoint( | ||
50 | x * mat.m[0][0] + y * mat.m[1][0] + z * mat.m[2][0] + w * mat.m[3][0], | ||
51 | x * mat.m[0][1] + y * mat.m[1][1] + z * mat.m[2][1] + w * mat.m[3][1], | ||
52 | x * mat.m[0][2] + y * mat.m[1][2] + z * mat.m[2][2] + w * mat.m[3][2], | ||
53 | x * mat.m[0][3] + y * mat.m[1][3] + z * mat.m[2][3] + w * mat.m[3][3]); | ||
54 | } | ||
55 | |||
56 | /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
57 | // HPoint *= Matrix4x4 | ||
58 | /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
59 | HPoint& HPoint::operator*=(const Matrix4x4& mat) | ||
60 | { | ||
61 | float xp = x * mat.m[0][0] + y * mat.m[1][0] + z * mat.m[2][0] + w * mat.m[3][0]; | ||
62 | float yp = x * mat.m[0][1] + y * mat.m[1][1] + z * mat.m[2][1] + w * mat.m[3][1]; | ||
63 | float zp = x * mat.m[0][2] + y * mat.m[1][2] + z * mat.m[2][2] + w * mat.m[3][2]; | ||
64 | float wp = x * mat.m[0][3] + y * mat.m[1][3] + z * mat.m[2][3] + w * mat.m[3][3]; | ||
65 | |||
66 | x = xp; y = yp; z = zp; w = wp; | ||
67 | |||
68 | return *this; | ||
69 | } | ||
70 | |||