Hallo
Ich habe zwei Matrix-Klassen für 44 und 33 Matrizen:
|
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
|
class CMatrix33
{
public:
union
{
/*
Mathematische Order [memory index layout]
11[0] 12[3] 13[6]
21[1] 22[4] 23[7]
31[2] 32[5] 33[8]
*/
struct
{
float m11; float m21; float m31;
float m12; float m22; float m32;
float m13; float m23; float m33;
};
float m[9];
};
public:
CMatrix33(void);
CMatrix33(const CMatrix33& M);
virtual ~CMatrix33(void);
CVector3 operator * (CVector3& v);
static CMatrix33 Build_IdentityMatrix();
};
|
|
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
|
class CMatrix44
{
public:
union
{
/*
Mathematische Order [memory index layout]
11[0] 12[4] 13[ 8] 14[12]
21[1] 22[5] 23[ 9] 24[13]
31[2] 32[6] 33[10] 34[14]
41[3] 42[7] 43[11] 44[15]
*/
struct
{
float m11; float m21; float m31; float m41;
float m12; float m22; float m32; float m42;
float m13; float m23; float m33; float m43;
float m14; float m24; float m34; float m44;
};
float m[16];
};
CMatrix44();
CMatrix44(const CMatrix44& M);
void operator *= (CMatrix44& m);
CMatrix44 operator * (CMatrix44& m);
CVector3 operator * (CVector3& v);
CMatrix44 Invert();
CMatrix44 Transpose();
CMatrix33 ConvertToMat33();
CMatrix33 ConvertToNormalMat();
private:
float DetSub(int line, int column);
float DetMain();
public:
// Build Matrix
static CMatrix44 Build_IdentityMatrix ();
static CMatrix44 Build_TranslationMatrix (float x, float y, float z);
static CMatrix44 Build_TranslationMatrix (CVector3& v);
static CMatrix44 Build_RotationMatrix (float AngleX, float AngleY, float AngleZ);
static CMatrix44 Build_RotationMatrix (CVector3& v);
static CMatrix44 Build_RotationMatrix (CVector3& v, float Angle);
static CMatrix44 Build_ViewMatrix (CVector3& eye, CVector3& center, CVector3& up);
static CMatrix44 Build_ProjectionMatrix (float fovy, float aspect, float zNear, float zFar);
static CMatrix44 Build_ScaleMatrix (float x, float y, float z);
static CMatrix44 Build_ScaleMatrix (CVector3& v);
};
|
Vom Prinzip sind beide Klassen gleich aufgebaut.
Wenn ich Instanzen der Klassen erzeuge und mir die Größe mit sizeof anzeigen lassen will liefert sizeof(CMatrix44) 64 bytes also 16 * 4.
sizeof(CMatrix33) liefert 40 bytes also 10 * 4 obwohl nur 9 floats enthalten sind.
Ich habe schon mit PRAGMA PACK(1, 2, 4) versucht das Problem zu lösen, aber ich bekomme die 40 bytes nicht weg.
Hat jemand eine Idee ????