kickerxy123
Erfahrenes Mitglied
Hallo!
Ich verwende: DirectX9.0C Win XP SP3 Devarian cpp mit MinGW.
Mein Problem besteht in der richtigen Kamerasteuerung. Zwar habe ich eine implementiert, doch irgendwie denke ich, dass sie nicht richtig ausgerichtet ist.
Denn wenn ich mich entlang der z- Achse bewege, geht er durch den Boden durch (20° Winkel oder so). Es könnte allerdings auch an den Objekten liegen, dass diese schief im Raum liegen...
Das ist meine Kamerasteuerung (relevanter Auszug):
Da auf den Befehl "Pfeil oben" lediglich die z- Position bearbeitet wird, sollte der Fehler nicht in der Abfrage, sondern eher in der Kameradefinition zu finden sein.
Oder aber, dass ich die Objekte schief in den Raum implementiere:
Da ist auch schon mein 2. mysterisches Problem...
Denn der Boden ist nicht orthogonal zum Dreieck ausgerichtet! Vielmehr in einem etwa 60/70° Winkel.
Ansonsten kann ich auch noch mehr von meinem Quelltext veröffentlichen, bzw. die .exe einmal hochladen
Vielen Dank,
kickerxy
Ich verwende: DirectX9.0C Win XP SP3 Devarian cpp mit MinGW.
Mein Problem besteht in der richtigen Kamerasteuerung. Zwar habe ich eine implementiert, doch irgendwie denke ich, dass sie nicht richtig ausgerichtet ist.
Denn wenn ich mich entlang der z- Achse bewege, geht er durch den Boden durch (20° Winkel oder so). Es könnte allerdings auch an den Objekten liegen, dass diese schief im Raum liegen...
Das ist meine Kamerasteuerung (relevanter Auszug):
Code:
//"Rollen" der Kamera auf z-Achse
if(GetAsyncKeyState(VK_INSERT ))
{
angle -= deg_to_rad(45.0f) * secsPassed;
cameradir = setVektor(sinf(angle), lookUp, cosf(angle));
}
//"Rollen" der Kamera auf z-Achse
if(GetAsyncKeyState(VK_HOME))
{
angle += deg_to_rad(45.0f) * secsPassed;
cameradir = setVektor(sinf(angle), lookUp, cosf(angle));
}
if(GetAsyncKeyState(VK_SPACE)) secsPassed = 0;
trash = 10.0f*secsPassed;
//Kamera auf x-Achse rollen (hoch/runter gucken)
if(GetAsyncKeyState(VK_LSHIFT)) cameradir = setVektor(sinf(angle), lookUp += 0.1f, cosf(angle));
if(GetAsyncKeyState(VK_LMENU)) cameradir = setVektor(sinf(angle), lookUp -= 0.1f, cosf(angle));
//Kamera zoom
if(GetAsyncKeyState(VK_PRIOR)) fov-= deg_to_rad(15.0f) * secsPassed * 10;
if(GetAsyncKeyState(VK_NEXT)) fov+= deg_to_rad(15.0f) * secsPassed * 10;
//Kamera auf x-Achse bewegen
if(GetAsyncKeyState(VK_LEFT)) camerapos.x -= trash;
if(GetAsyncKeyState(VK_RIGHT)) camerapos.x += trash;
//Kamera auf y-Achse bewegen
if(GetAsyncKeyState(VK_RSHIFT)) camerapos.y += trash;
if(GetAsyncKeyState(VK_RMENU)) camerapos.y -= trash;
//Kamera auf z-Achse bewegen
if(GetAsyncKeyState(VK_UP )) camerapos.z += trash;
if(GetAsyncKeyState(VK_DOWN )) camerapos.z -= trash;
//Mapgrenzen kontrollieren
if(camerapos.x >= map.right ) camerapos.x = map.right;
if(camerapos.x <= map.left ) camerapos.x = map.left;
if(camerapos.y >= map.top ) camerapos.y = map.top;
if(camerapos.y <= map.bottom ) camerapos.y = map.bottom;
if(camerapos.z >= map.depth ) camerapos.z = map.depth;
if(camerapos.z <= map.back ) camerapos.z = map.back;
if (fov >= deg_to_rad(180.0f)) fov = deg_to_rad(179.9f);
else if(fov <= deg_to_rad(0.0f)) fov = deg_to_rad(0.1f);
Matrix mCamera = matrixCamera(camerapos,vector3d_add(camerapos, cameradir),setVektor(0.0f, 1.0f, 0.0f));
pD3DDevice->SetTransform(D3DTS_VIEW, (D3DMATRIX*)(&mCamera));
Matrix mProjection = matrixProjection(fov, aspect, 0.1f, 250.0f);
pD3DDevice->SetTransform(D3DTS_PROJECTION, (D3DMATRIX*)(&mProjection));
Da auf den Befehl "Pfeil oben" lediglich die z- Position bearbeitet wird, sollte der Fehler nicht in der Abfrage, sondern eher in der Kameradefinition zu finden sein.
Oder aber, dass ich die Objekte schief in den Raum implementiere:
Code:
//Bewegliches Dreieck
triangleVertex[0].position = setVektor(0.0f,1.0f,0.0f);
triangleVertex[1].position = setVektor(1.0f,-1.0f,0.0f);
triangleVertex[2].position = setVektor(-1.0f,-1.0f,0.0f);
Code:
//Boden
ground[0].position = setVektor(0.0f,0.0f,-2.0f);
ground[1].position = setVektor(10.0f,0.0f,8.0f);
ground[2].position = setVektor(-10.0f,0.0f,8.0f);
Denn der Boden ist nicht orthogonal zum Dreieck ausgerichtet! Vielmehr in einem etwa 60/70° Winkel.
Ansonsten kann ich auch noch mehr von meinem Quelltext veröffentlichen, bzw. die .exe einmal hochladen
Vielen Dank,
kickerxy
Zuletzt bearbeitet: