Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 |
// Verwendete Symbole vordeklarieren class Vector2; class Vector3; class Matrix; class Plane; class Model; class Octree; struct OctreeNode; |
Administrator
Administrator
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// ****************************************************************** // 2D-Richtungsvektor transformieren Vector2 Vector2TransformNormal(const Vector2& v,const Matrix& m) { // Vektorlänge berechnen const float fLength = Vector2Length(v); if(fLength == 0.0f) return v; // Transponierte inverse Matrix berechnen const Matrix mTransform( MatrixTranspose(MatrixInvert(m))); // Vektor mit Matrix transformieren und ursprüngliche Länge wiederherstellen return Vector2Normalize(Vector2(v.x * mTransform.m11 + v.y * mTransform.m21, v.x * mTransform.m12 + v.y * mTransform.m22)) * fLength; } |
C-/C++-Quelltext |
|
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 |
#pragma once #include "stdafx.h" // Verwendete Symbole vordefinieren class Vector2; class Vector3; Matrix MatrixInvert(const Matrix& m); // ****************************************************************** // Die Matrixklasse class Matrix { public: // Variablen union { struct { float m11, m12, m13, m14, // Elemente der Matrix m21, m22, m23, m24, m31, m32, m33, m34, m41, m42, m43, m44; }; float m[4][4]; // Zweidimensionales Array der Elemente float n[16]; // Eindimensionales Array der Elemente D3DMATRIX mD3DMatrix; // Matrix als D3DMATRIX }; // Konstruktoren Matrix() {} Matrix(const Matrix& m) : m11(m.m11), m12(m.m12), m13(m.m13), m14(m.m14), m21(m.m21), m22(m.m22), m23(m.m23), m24(m.m24), m31(m.m31), m32(m.m32), m33(m.m33), m34(m.m34), m41(m.m41), m42(m.m42), m43(m.m43), m44(m.m44) {} Matrix(float _m11, float _m12, float _m13, float _m14, float _m21, float _m22, float _m23, float _m24, float _m31, float _m32, float _m33, float _m34, float _m41, float _m42, float _m43, float _m44) : m11(_m11), m12(_m12), m13(_m13), m14(_m14), m21(_m21), m22(_m22), m23(_m23), m24(_m24), m31(_m31), m32(_m32), m33(_m33), m34(_m34), m41(_m41), m42(_m42), m43(_m43), m44(_m44) {} Matrix(const float* pfValue) : mD3DMatrix(*((D3DMATRIX*)(pfValue))) {} Matrix(const D3DMATRIX& m) : mD3DMatrix(m) {} // Casting-Opeatoren operator float* () {return (float*)(n);} operator D3DMATRIX& () {return mD3DMatrix;} operator const D3DMATRIX& () const {return mD3DMatrix;} // Zugriffsoperatoren float& operator () (int iRow, int iColumn) {return m[iRow - 1][iColumn - 1];} float operator () (int iRow, int iColumn) const {return m[iRow - 1][iColumn - 1];} // Zuweisungsoperatoren Matrix& operator = (const Matrix& m) {mD3DMatrix = m.mD3DMatrix; return *this;} Matrix& operator += (const Matrix& m) { m11 += m.m11; m12 += m.m12; m13 += m.m13; m14 += m.m14; m21 += m.m21; m22 += m.m22; m23 += m.m23; m24 += m.m24; m31 += m.m31; m32 += m.m32; m33 += m.m33; m34 += m.m34; m41 += m.m41; m42 += m.m42; m43 += m.m43; m44 += m.m44; return *this; } Matrix& operator -= (const Matrix& m) { m11 -= m.m11; m12 -= m.m12; m13 -= m.m13; m14 -= m.m14; m21 -= m.m21; m22 -= m.m22; m23 -= m.m23; m24 -= m.m24; m31 -= m.m31; m32 -= m.m32; m33 -= m.m33; m34 -= m.m34; m41 -= m.m41; m42 -= m.m42; m43 -= m.m43; m44 -= m.m44; return *this; } Matrix& operator *= (const Matrix& m) { return *this = Matrix(m.m11 * m11 + m.m21 * m12 + m.m31 * m13 + m.m41 * m14, m.m12 * m11 + m.m22 * m12 + m.m32 * m13 + m.m42 * m14, m.m13 * m11 + m.m23 * m12 + m.m33 * m13 + m.m43 * m14, m.m14 * m11 + m.m24 * m12 + m.m34 * m13 + m.m44 * m14, m.m11 * m21 + m.m21 * m22 + m.m31 * m23 + m.m41 * m24, m.m12 * m21 + m.m22 * m22 + m.m32 * m23 + m.m42 * m24, m.m13 * m21 + m.m23 * m22 + m.m33 * m23 + m.m43 * m24, m.m14 * m21 + m.m24 * m22 + m.m34 * m23 + m.m44 * m24, m.m11 * m31 + m.m21 * m32 + m.m31 * m33 + m.m41 * m34, m.m12 * m31 + m.m22 * m32 + m.m32 * m33 + m.m42 * m34, m.m13 * m31 + m.m23 * m32 + m.m33 * m33 + m.m43 * m34, m.m14 * m31 + m.m24 * m32 + m.m34 * m33 + m.m44 * m34, m.m11 * m41 + m.m21 * m42 + m.m31 * m43 + m.m41 * m44, m.m12 * m41 + m.m22 * m42 + m.m32 * m43 + m.m42 * m44, m.m13 * m41 + m.m23 * m42 + m.m33 * m43 + m.m43 * m44, m.m14 * m41 + m.m24 * m42 + m.m34 * m43 + m.m44 * m44); } Matrix& operator *= (const float f) { m11 *= f; m12 *= f; m13 *= f; m14 *= f; m21 *= f; m22 *= f; m23 *= f; m24 *= f; m31 *= f; m32 *= f; m33 *= f; m34 *= f; m41 *= f; m42 *= f; m43 *= f; m44 *= f; return *this; } Matrix& operator /= (const Matrix& m) { return *this *= MatrixInvert(m); } Matrix& operator /= (const float f) { m11 /= f; m12 /= f; m13 /= f; m14 /= f; m21 /= f; m22 /= f; m23 /= f; m24 /= f; m31 /= f; m32 /= f; m33 /= f; m34 /= f; m41 /= f; m42 /= f; m43 /= f; m44 /= f; return *this; } }; // Arithmetische Operatoren inline Matrix operator + (const Matrix& a, const Matrix& b) {return Matrix(a.m11 + b.m11, a.m12 + b.m12, a.m13 + b.m13, a.m14 + b.m14, a.m21 + b.m21, a.m22 + b.m22, a.m23 + b.m23, a.m24 + b.m24, a.m31 + b.m31, a.m32 + b.m32, a.m33 + b.m33, a.m34 + b.m34, a.m41 + b.m41, a.m42 + b.m42, a.m43 + b.m43, a.m44 + b.m44);} inline Matrix operator - (const Matrix& a, const Matrix& b) {return Matrix(a.m11 - b.m11, a.m12 - b.m12, a.m13 - b.m13, a.m14 - b.m14, a.m21 - b.m21, a.m22 - b.m22, a.m23 - b.m23, a.m24 - b.m24, a.m31 - b.m31, a.m32 - b.m32, a.m33 - b.m33, a.m34 - b.m34, a.m41 - b.m41, a.m42 - b.m42, a.m43 - b.m43, a.m44 - b.m44);} inline Matrix operator - (const Matrix& m) {return Matrix(-m.m11, -m.m12, -m.m13, -m.m14, -m.m21, -m.m22, -m.m23, -m.m24, -m.m31, -m.m32, -m.m33, -m.m34, -m.m41, -m.m42, -m.m43, -m.m44);} inline Matrix operator * (const Matrix& a, const Matrix& b) { return Matrix(b.m11 * a.m11 + b.m21 * a.m12 + b.m31 * a.m13 + b.m41 * a.m14, b.m12 * a.m11 + b.m22 * a.m12 + b.m32 * a.m13 + b.m42 * a.m14, b.m13 * a.m11 + b.m23 * a.m12 + b.m33 * a.m13 + b.m43 * a.m14, b.m14 * a.m11 + b.m24 * a.m12 + b.m34 * a.m13 + b.m44 * a.m14, b.m11 * a.m21 + b.m21 * a.m22 + b.m31 * a.m23 + b.m41 * a.m24, b.m12 * a.m21 + b.m22 * a.m22 + b.m32 * a.m23 + b.m42 * a.m24, b.m13 * a.m21 + b.m23 * a.m22 + b.m33 * a.m23 + b.m43 * a.m24, b.m14 * a.m21 + b.m24 * a.m22 + b.m34 * a.m23 + b.m44 * a.m24, b.m11 * a.m31 + b.m21 * a.m32 + b.m31 * a.m33 + b.m41 * a.m34, b.m12 * a.m31 + b.m22 * a.m32 + b.m32 * a.m33 + b.m42 * a.m34, b.m13 * a.m31 + b.m23 * a.m32 + b.m33 * a.m33 + b.m43 * a.m34, b.m14 * a.m31 + b.m24 * a.m32 + b.m34 * a.m33 + b.m44 * a.m34, b.m11 * a.m41 + b.m21 * a.m42 + b.m31 * a.m43 + b.m41 * a.m44, b.m12 * a.m41 + b.m22 * a.m42 + b.m32 * a.m43 + b.m42 * a.m44, b.m13 * a.m41 + b.m23 * a.m42 + b.m33 * a.m43 + b.m43 * a.m44, b.m14 * a.m41 + b.m24 * a.m42 + b.m34 * a.m43 + b.m44 * a.m44); } inline Matrix operator * (const Matrix& m, const float f) { return Matrix(m.m11 * f, m.m12 * f, m.m13 * f, m.m14 * f, m.m21 * f, m.m22 * f, m.m23 * f, m.m24 * f, m.m31 * f, m.m32 * f, m.m33 * f, m.m34 * f, m.m41 * f, m.m42 * f, m.m43 * f, m.m44 * f); } inline Matrix operator * (const float f, const Matrix& m) { return Matrix(m.m11 * f, m.m12 * f, m.m13 * f, m.m14 * f, m.m21 * f, m.m22 * f, m.m23 * f, m.m24 * f, m.m31 * f, m.m32 * f, m.m33 * f, m.m34 * f, m.m41 * f, m.m42 * f, m.m43 * f, m.m44 * f); } inline Matrix operator / (const Matrix& a, const Matrix& b) {return a * MatrixInvert(b);} inline Matrix operator / (const Matrix& m, const float f) { return Matrix(m.m11 / f, m.m12 / f, m.m13 / f, m.m14 / f, m.m21 / f, m.m22 / f, m.m23 / f, m.m24 / f, m.m31 / f, m.m32 / f, m.m33 / f, m.m34 / f, m.m41 / f, m.m42 / f, m.m43 / f, m.m44 / f); } // Vergleichsoperatoren inline bool operator == (const Matrix& a, const Matrix& b) { if(a.m11 != b.m11) return false; if(a.m12 != b.m12) return false; if(a.m13 != b.m13) return false; if(a.m14 != b.m14) return false; if(a.m21 != b.m21) return false; if(a.m22 != b.m22) return false; if(a.m23 != b.m23) return false; if(a.m24 != b.m24) return false; if(a.m31 != b.m31) return false; if(a.m32 != b.m32) return false; if(a.m33 != b.m33) return false; if(a.m34 != b.m34) return false; if(a.m41 != b.m41) return false; if(a.m42 != b.m42) return false; if(a.m43 != b.m43) return false; return a.m44 == b.m44; } // Vergleichsoperatoren inline bool operator != (const Matrix& a, const Matrix& b) { if(a.m11 != b.m11) return true; if(a.m12 != b.m12) return true; if(a.m13 != b.m13) return true; if(a.m14 != b.m14) return true; if(a.m21 != b.m21) return true; if(a.m22 != b.m22) return true; if(a.m23 != b.m23) return true; if(a.m24 != b.m24) return true; if(a.m31 != b.m31) return true; if(a.m32 != b.m32) return true; if(a.m33 != b.m33) return true; if(a.m34 != b.m34) return true; if(a.m41 != b.m41) return true; if(a.m42 != b.m42) return true; if(a.m43 != b.m43) return true; return a.m44 != b.m44; } // ****************************************************************** // Funktionen deklarieren inline Matrix MatrixIdentity() {return Matrix(1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f);} // Identitätsmatrix liefern Matrix MatrixTranslation(const Vector3& v); // Translationsmatrix (Verschiebungsmatrix) berechnen Matrix MatrixRotationX(const float f); // Rotationsmatrix um die X-Achse berechnen Matrix MatrixRotationY(const float f); // Rotationsmatrix um die Y-Achse berechnen Matrix MatrixRotationZ(const float f); // Rotationsmatrix um die Z-Achse berechnen Matrix MatrixRotation(const float x, const float y, const float z); // Rotiert um alle drei Achsen Matrix MatrixRotation(const Vector3& v); // Rotiert um alle drei Achsen Matrix MatrixRotationAxis(const Vector3& v, const float f); // Rotationsmatrix um eine beliebige Achse berechnen Matrix MatrixScaling(const Vector3& v); // Skalierungsmatrix berechnen Matrix MatrixAxes(const Vector3& vXAxis, const Vector3& vYAxis, const Vector3& vZAxis); // Liefert eine Achsenmatrix float MatrixDet(const Matrix& m, float* pfOut); // Determinante berechnen Matrix MatrixInvert(const Matrix& m); // Invertierte (umgekehrte) Matrix berechnen Matrix MatrixTranspose(const Matrix& m); // Transponierte Matrix berechnen Matrix MatrixProjection(const float fFOV, const float fAspect, const float fNearPlane, const float fFarPlane); // Projektionsmatrix berechnen Matrix MatrixCamera(const Vector3& vPos, const Vector3& vLookAt, const Vector3& vUp = Vector3(0.0f, 1.0f, 0.0f)); // Kameramatrix erzeugen Matrix MatrixToTex2DMatrix(const Matrix& m); // In Texturmatrix umwandeln // ****************************************************************** |
C-/C++-Quelltext |
|
1 2 3 4 |
// Verwendete Symbole vordefinieren class Vector2; class Vector3; Matrix MatrixInvert(const Matrix& m); |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//------------------------------ // MAIN.H //----------------------------- struct SObject; #include "test.h" struct SObject { unsigned ID; float* fSpace; } SObject TestObjectInMainIncludeFile; //------------------------------ // TEST.H //----------------------------- SObject TestObjectInTestIncludeFile; |
Anonymous
unregistriert
Werbeanzeige