Viewmatrix - D3DXMATRIX

MedRamBO

Mitglied
Hallo,

ich versuche mir in einem Spiel eine Viewmatrix vom Typ D3DXMATRIX zu erstellen.
Ich habe den PITCH, YAW, und ROLL soweit gegeben ( in Grad ).

Ich dachte mir ich könnte dafür die Funktion hier benutzen:
D3DXMatrixRotationYawPitchRoll
Builds a matrix with a specified yaw, pitch, and roll.
D3DXMATRIX * D3DXMatrixRotationYawPitchRoll(
D3DXMATRIX * pOut,
FLOAT Yaw,
FLOAT Pitch,
FLOAT Roll
);
Parameters
pOut
[in, out] Pointer to the D3DXMATRIX structure that is the result of the operation.
Yaw
[in] Yaw around the y-axis, in radians.
Pitch
[in] Pitch around the x-axis, in radians.
Roll
[in] Roll around the z-axis, in radians.
Return Values
Pointer to a D3DXMATRIX structure with the specified yaw, pitch, and roll
http://msdn.microsoft.com/en-us/library/ee417338(VS.85).aspx

Leider scheint das aber nicht zu stimmen, weil nachher die komplette Viewmatrix 0’en enthält.
D3DXMATRX (
0,0,0,0,
0,0,0,0,
0,0,0,0,
0,0,0,0 )

Hat jemand eine Idee wie es anders geht?

Gruß,
Frank
 
PHP:
class CAngles {
	float YAW;	//Links, Rechts			#von 0 bis 360
	float PITCH;	//Oben, Unten			#von -85 bis +85
	float ROLL;	//Um die eigene gedreht		#ist 0 da es um ein FPS spiel geht
};

D3DXMATRIX* getViewMatrix( CAngles* pAngles ) {
	if( pAngles == NULL )
		return NULL;

	//Die Werte von YAW, PITCH und ROLL sind richtig.. Hab die gerade gelogt.

	D3DXMATRIX viewMatrix;
	D3DXMatrixRotationYawPitchRoll( &viewMatrix, pAngles->YAW, pAngles->PITCH, pAngles->ROLL );
	return viewMatrix;
}

Hoffe das hilft, Danke für die schnelle Antwort :)

Return value dann so benutzen:
PHP:
matrix->_41 usw.
 
Nicht pushen ;)

Code:
D3DXMATRIX* getViewMatrix...

Code:
D3DXMATRIX viewMatrix;
return viewMatrix;

Fällt dir was auf? Une nein, jetzt nicht in return &viewMatrix ändern, damit gibst du lokalen Speicher zurück, der zerstört wird!
 
Still doesnt work. Modified it like this now:

PHP:
//Macro definitions
#define GET_XAXIS_FROMMATRIX( out_vector, pMatrix) { D3DXVec3Normalize( out_vector, &D3DXVECTOR3((pMatrix)->_11,(pMatrix)->_12,(pMatrix)->_13)); }
#define GET_YAXIS_FROMMATRIX( out_vector, pMatrix) { D3DXVec3Normalize( out_vector, &D3DXVECTOR3((pMatrix)->_21,(pMatrix)->_22,(pMatrix)->_23)); }
#define GET_ZAXIS_FROMMATRIX( out_vector, pMatrix) { D3DXVec3Normalize( out_vector, &D3DXVECTOR3(((pMatrix))->_31,(pMatrix)->_32,(pMatrix)->_33)); }

//Get right, forward and up D3DXVECTOR3s
	D3DXMatrixRotationYawPitchRoll( &camMatrix, degToRad(pTarget->yaw), degToRad(pTarget->pitch), degToRad(0.0f) );
	GET_XAXIS_FROMMATRIX	(&Right,	&camMatrix);
	GET_ZAXIS_FROMMATRIX	(&Forward,	&camMatrix);
	GET_YAXIS_FROMMATRIX	(&Up,		&camMatrix);

Ich bekomms nicht hin.. ich muss irgentwie an die 3 D3DXVECTOR3s kommen..
 
Zurück