Spieleprogrammierung: Kamera auf X achse bewegen

FSA

Erfahrenes Mitglied
Hallo
Jeder kenn ein EgoShooter oder? Gut
Also ich kann meine Kamera mit der Maus schwenken und auch in die aktuelle richtung gehen.
Aber ich will wenn man Pfeil links oder Rechts drück sich die Kamera auf der X achse bewegt.
Ist ja relativ einfach: CamPos.x += 25* fNumSecs;.
Nur das ich halt auch nur auf der x achse gehen kann, möchte aber das wenn man die links/rechts taste drückt man zur seite geht.Was muss ich dafür rechnen?
Danke
 
Hallo,

Du hast ja vermutlich eine Matrix die dir deine Kameraposition beschreibt. Je nach implementierung ist es so das Mutliplikationen mit einer Matrix von rechts um die lokalen Achsen verschiebt, und eine Multiplikation von Links um die globalen Achsen. Was du machen willst ist eine Verschiebung um die X-Achse nach den Rotationen, also entlang der lokalen X-Achse.
 
Ok
Ich verstehe den Text leider nicht so ganz.
Aber meine berechung für die Kameramatrix:
C++:
mCamera = MatrixCamera(g_vCameraPos,
		                     g_vCameraPos + Vector3(sinf(g_fCameraAngleX) * cosf(g_fCameraAngleY),
							                               g_fCameraAngleY,
														  cosf(g_fCameraAngleX) * cosf(g_fCameraAngleY)));
MatrixCamera ist nur ne Matrix und Vector3, na was wohl :D
Die berechung der Blickrichtung muss ich nicht schreiben oder?
Danke
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

Ich versteh noch nicht ganz wie du aus zwei Vec3 (g_vCameraPos, und dem den du dir da zusammenaddierst) eine Kameramatrix bekommst. Du musst doch irgendwo ein 4x4-Matrix zusammenstellen mit der du dann die Vertices multiplizierst.
Welches System verwendest du? DirectX oder OpenGL?

Welchen Typ hat mCamera? und was passiert in MatrixCamera()?
 
MatrixCamera():
C++:
Matrix MatrixCamera( const Vector3& vPos, 
									const Vector3& vLookAt, 
									const Vector3& vUp ) //  Vector3( 0.0f, 1.0f, 0.0f )
{
	Vector3 vZAxis( Vector3Normalize( vLookAt - vPos ) );

	Vector3 vXAxis( Vector3Normalize( Vector3Cross( vUp, vZAxis ) ) );

	Vector3 vYAxis( Vector3Normalize( Vector3Cross( vZAxis, vXAxis ) ) );

	return MatrixTranslation( -vPos ) *
	       Matrix( vXAxis.x, vYAxis.x, vZAxis.x, 0.0f, 
		            vXAxis.y, vYAxis.y, vZAxis.y, 0.0f, 
				    vXAxis.z, vYAxis.z, vZAxis.z, 0.0f, 
					0.0f,     0.0f,     0.0f,     1.0f );
}
Ich verwende DirectX 9
Matrix mCamera; ist das gleiche wie D3DMATRIX
 
Zuletzt bearbeitet von einem Moderator:
Ist für DirectX-Matrizen die Multiplikation definiert? Dann erstellst du dir zusätzlich eine Translationsmatrix entlang der x-Achse und rechnest: cameraMatrix = translationsMatrix * cameraMatrix.
 
Ich möchte ja nur das sich die Kamera je nach blickrichtung zur Seite bewegt.
Nichts mit Shadern immoment( obwohl... ):D
Danke
 
Zurück