Hallo,
ich habe ein Problem mit der Erstellung einer Projektsionsmatrix. Ich bin dem "Rat" der TriBase Engine befolgt, und wollte analog eine Methode schreiben, die mir eine Projektionsmatrix berechnet und zurückgibt. Jene sieht folgendermaßen aus:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
static CMatrix PojectionMatrix(const float fFOV, const float fAspect, const float fNearPlane, const float fFarPlane)
{
CMatrix mResult;
// D3DX-Funktion benutzen
D3DXMatrixPerspectiveFovLH((D3DXMATRIX*)(&mResult),
fFOV,
fAspect,
fNearPlane,
fFarPlane);
return mResult;
}
|
Hier ist sicher wichtig, dass der Casting Operator für Matrizen (eigene Matrix / D3D Matrix) implementiert wurde, was ich so gemacht habe (weiter oben in derselben Datei):
|
Quellcode
|
1
|
inline operator D3DMATRIX&() { return mD3DMatrix; }
|
Also genau wie auch in der TriBase Engine. Des weiteren sehen die Elemente meiner Matrix Klasse so aus:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
private:
union
{
struct
{
double m11, m12, m13, m14,
m21, m22, m23, m24,
m31, m32, m33, m34,
m41, m42, m43, m44;
};
double m[4][4];
double n[16];
D3DMATRIX mD3DMatrix;
};
|
Nun zum eigentlichen Problem, möchte ich eine Proj. Matrix erstellen, so ergibt folgender Code im Hauptprogramm:
|
Quellcode
|
1
|
CMatrix m = CMatrix::ProjectionMatrix( M_PI_2, 3.0 / 4.0, 10, 100 );
|
Diese Matrix hier:
|
Quellcode
|
1
2
3
4
5
6
|
Projektionsmatrix:
0.00, 0.00, 0.01, 0.00
0.00, 0.01, 0.00, 0.00
0.00, 0.00, 1.00, 0.00
0.00, 0.00, 0.00, 1.00
Press any key to continue
|
Das kann doch nicht sein, oder? Vor allem ist es so, dass gravierende Änderungen an den Parametern beim Aufruf von ProjectionMatrix kaum eine Veränderung an der (Projektions-)Matrix zeigen.
Wo könnte der Fehler liegen? Der Compiler oder Linker gibt mir darüber keinen Aufschluss. Könnte es vielleicht an einem Fehlerhaften Casten der D3DMATRIX zu meiner eigenen Matrixklasse sein?
Für Hilfe wäre ich sehr dankbar
Mit freundlichen Grüssen,
Timo