Seite 1 von 1

Matrizen (aus Soufians Uservorstellung entfernt)

Verfasst: Di Jan 20, 2009 5:00 pm
von cloidnerux
So, eine Matrice(Matrix) ist eine 3x3 (X x X) Feld, also zB. sowas:

Code: Alles auswählen

1 1 1
1 1 1
1 1 1
Damit kann man dann verschiedene Rechenungen Durchführen(*,/,+,-).
In der 3D Programmierung werden dadurch Transformationen an Objekten durchgeführt, heißt man speichert die Tarnsformation in eine Matrix und wendet die Matrix dann auf das Objekt an.
Ein Vector ist im Grundegenommen eine Positionsmarke(x,y,z). Mit Vectoren werden aber alles Mögliche gesteuert, z.B KAmera ausrichtung...
Hier mal ein Paar code snippets eines mit DirectX von mir programmierten Ego-Shooters(ist noch in der Entwicklung):

Code: Alles auswählen

float kamera::kamera_schwenken(float seit, float hoch)
{
	D3DXVECTOR3 blick, norm;
	D3DXMATRIX dreh;

	blick = da_gucke_ich_hin - hier_bin_ich;
	D3DXVec3Normalize(&blick, &blick);
	if(blick.x*blick.x + blick.z*blick.z < 0.005)
	{
		if(((blick.y > 0) && (hoch > 0)) || ((blick.y < 0) && (hoch < 0))) hoch=0;
	}
	D3DXVec3Cross(&norm, &blick, &D3DXVECTOR3(0,1,0));
	D3DXMatrixRotationAxis(&dreh, &norm, hoch);
	D3DXVec3TransformNormal(&blick, &blick, &dreh);
	D3DXMatrixRotationY(&dreh, seit);
	D3DXVec3TransformNormal(&blick, &blick, &dreh);
	da_gucke_ich_hin = hier_bin_ich + blick;
	return seit;
}
Damit wird die Kamera geschwenkt.

Code: Alles auswählen

	int z=0, s=0;
	D3DXMATRIX world;
	D3DXMATRIX view;
	D3DXMATRIX player3, player2;
	D3DXMATRIX view2;
//	player.punkt1=D3DXVECTOR2(player_position.x+10,player_position.z+5);
//	player.punkt2=D3DXVECTOR2(player_position.x-10,player_position.z-5);
	//D3DXVECTOR3 kamera2 = D3DXVECTOR3(da_gucke_ich_hin.x+10, da_gucke_ich_hin.y, da_gucke_ich_hin.z);
	mein_timer.start();
	mein_directx.device->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(128,255,255),1.0f, 0);
	mein_directx.device->BeginScene();
	//
	//Kamera Setzen
	//
	D3DXMatrixLookAtLH( &view, &meine_kamera.hier_bin_ich, &meine_kamera.da_gucke_ich_hin, &D3DXVECTOR3(0.0f, 1.0f,0.0f));
	meine_map.map_objekt.draw();
	//
	//Player Spwanen
	//
	//D3DXMatrixTranslation(&world2, w_x,w_y, w_z);
	D3DXMatrixTranslation(&player3, mein_player.pos.x, mein_player.pos.y, mein_player.pos.z);
	D3DXMatrixRotationY( &player2 , mein_player.player_rotation_y);
	D3DXMatrixMultiply(&player3, &player2, &player3);
	mein_directx.device->SetTransform(D3DTS_WORLD, &player3);
	mein_player.player_objekt.draw();
Und das ist der anfagngsteil meiner render() funktion.
Aber bevor du auhc nur ein Bisschen DirectX oder OpenGL Programmieren kannst, musst du C++ beherschen.

Und noch ein Buch Tipp: Spieleprogrammieren mit C++ und DirectX von Dr. Ulrich Kaiser und Phillip Lensing.
Und damit du mit C++ nicht zu kurz kommst: C++ von A bis Z von Jürgen Wolf.

Re: Soufian

Verfasst: Di Jan 20, 2009 5:59 pm
von Dirty Oerti
Ein Vector ist im Grundegenommen eine Positionsmarke(x,y,z).
Ein Vector ist wie der Zeiger einer Uhr.
Damit KANN man eine Position (relativ zu einem Ausgangspunkt) angeben.



a--------->b

Das ist ein (eindimensionaler) Vector : (10)
Das heißt, der Zeiger zeigt von a (per Definition bei Vectoren = 0) nach b.
In X-Richtung zeigt er 10 EInheiten, andere Richtungen gibt es nicht.



a----->
´´´´´´´´´|
´´´´´´´´´|
´´´´´´´´V
´´´´´´´´´b

Dieser Vector ist 2 Dimensional.
Er zeigt 6 Einheiten in x-Richtung und 3 Einheiten in y-Richtung.
Schreiben würde man das so (eigntl die Zahlen übereinander) (6 | 3)

Das ganze geht natürlich auch in 3D.

Mit Vectoren kannst du vieles darstellen. Bewegungen, Kräfte, Normalen etc.
Oder auch eine Position.
Dabei zeigt der Vector vom Nullpunkt deines Systems zur Position.

Hast du nun einen Geschwindigkeitsvector kannst du ihn zur Position addieren und bekommst die neue Position.

Pos: ( 10 | 10 | 10 )
Geschwindigkeit (z.b. in Einheiten pro Frame): ( 1 | -1 | -2 )

Nach einem Frame bist du dann an Position: ( 11 | 9 | 8 )
Nach N Frames bist du an Position

( 10 + 1*N | 10 + (-1)*N | 10 + (-2)*N )

Aber lass das mit 3d erstmal ;)

MfG
Daniel