 |
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Gast
|
Verfasst am: 07.11.2002, 18:47 Titel: hallo allerseits |
|
|
hi!
Ich habe mich am kapitel 24 versucht, in der Hoffnung, bei Code: | D3DMatrixLookAtLH(&ViewMatrix,
&D3DVECTOR3(...),
&D3DVECTOR3(...),
&D3DVECTOR3(...)); |
den zweiten VECTOR so zu verändern, dass ich mit den Links-/Rechts-
Pfeiltasten die Blickrichtung ändern kann. Mein Code bei Render() sieht also folgendermaßen aus:
Code: | D3DXMATRIX ViewMatrix;
// Kamera verschieben
D3DXMatrixLookAtLH(&ViewMatrix,
&D3DXVECTOR3( 0.0f, 0.0f, -10.0f),
&D3DXVECTOR3( 0.0f, 0.0f, 0.0f),
&D3DXVECTOR3( 0.0f, 1.0f, 0.0f));
D3DXMATRIX TransView;
D3DXMATRIX ChangeView;
D3DXMatrixTranslation(&TransView,0.0f,CameraY,CameraZ);
D3DXMatrixTranslation(&ChangeView,CameraX,0.0f,0.0f);
D3DXMatrixMultiply(&ViewMatrix,&ChangeView,&TransView);
lpD3DDevice->SetTransform(D3DTS_VIEW,&ViewMatrix); |
Leider funzt 's net. Kann mir jemand weiterhelfen?  |
|
Nach oben |
|
 |
Jörg JLI MVP


Anmeldedatum: 19.07.2002 Beiträge: 182 Wohnort: Siegen/NRW Medaillen: Keine
|
Verfasst am: 07.11.2002, 21:03 Titel: |
|
|
Probier mal so:
Code: |
D3DXMATRIX ViewMatrix;
// Kamera verschieben
D3DXMatrixLookAtLH(&ViewMatrix,
&D3DXVECTOR3( 0.0f, 0.0f, -10.0f),
&D3DXVECTOR3( 0.0f, 0.0f, 0.0f),
&D3DXVECTOR3( 0.0f, 1.0f, 0.0f));
D3DXMATRIX TransView;
D3DXMatrixTranslation(&TransView,CameraX,CameraY,CameraZ);
D3DXMatrixMultiply(&ViewMatrix,&ViewMatrix,&TransView);
lpD3DDevice->SetTransform(D3DTS_VIEW,&ViewMatrix); |
In deinem Code wird die ViewMatrix nämlich komplett überschrieben, anstatt nur transformiert zu werden. _________________ www.messiahzone.de.vu |
|
Nach oben |
|
 |
Gast
|
Verfasst am: 09.11.2002, 15:49 Titel: THX! aber... |
|
|
Danke! Aber so war des ja auch auf der CD. Ich wollt aber versuchen den zweiten D3DVECTOR3(...) zu ändern, sodass ich die BLICKRICHTUNG der Kamera ändern kann. Deshalb ja auch
Code: | D3DXMATRIX ChangeMatrix; |
ciao! |
|
Nach oben |
|
 |
Jörg JLI MVP


Anmeldedatum: 19.07.2002 Beiträge: 182 Wohnort: Siegen/NRW Medaillen: Keine
|
Verfasst am: 09.11.2002, 17:40 Titel: |
|
|
meinst du mit Blickrichtung, dass du die Kamera auch drehen willst, oder wie muss ich das verstehen? _________________ www.messiahzone.de.vu |
|
Nach oben |
|
 |
under_construction Junior JLI'ler
Alter: 36 Anmeldedatum: 12.11.2002 Beiträge: 52
Medaillen: Keine
|
Verfasst am: 12.11.2002, 16:45 Titel: RE: Blickrichtung |
|
|
JA! Ganz genau so meint ich des. Das man also mit der Kamera in verschiedene Richtungen gucken kann und net nur Schritte nach links und rechts machen kann |
|
Nach oben |
|
 |
Jörg JLI MVP


Anmeldedatum: 19.07.2002 Beiträge: 182 Wohnort: Siegen/NRW Medaillen: Keine
|
Verfasst am: 12.11.2002, 18:03 Titel: |
|
|
Das kannst du z.B. machen, indem du die ViewMatrix hinterher einfach mit einer Rotationsmatrix multiplizierst, die du mit D3DXMatrixRotationYawPitchRoll() erstellen kannst. Um dich dann noch Egoshooter-mäßig zu bewegen musst du noch den Bewegungsvektor an die Rotation anpassen.
Pseudocode:
Code: |
//am anfang einmal ViewMatrix und Rotation initialisieren
D3DXMatrixLookAtLH(&InitViewMatrix,
&D3DXVECTOR3( 0.0f, 0.0f, -10.0f),
&D3DXVECTOR3( 0.0f, 0.0f, 0.0f),
&D3DXVECTOR3( 0.0f, 1.0f, 0.0f));
D3DXMATRIX ViewMatrix=InitViewMatrix;
float fYaw=0.0f; //rotation um y-achse
float fPitch=0.0f; //rotation um x-achse
float fRoll=0.0f; //rotation um z-achse
D3DXMATRIX matRot;
D3DXMatrixIdentity(&matRot);
D3DXVECTOR3 vPos=D3DXVECTOR3(0,0,0); //position der kamera
//in jedem frame:
ViewMatrix=InitViewMatrix * matRot;
ViewMatrix._41=vPos.x; //position
ViewMatrix._42=vPos.y;
ViewMatrix._43=vPos.z;
d3dDevice->SetTransform(D3DTS_VIEW,&ViewMatrix);
|
Die Funktion, die deine Camera Rotiert:
Code: |
void RotateCam(float x, float y, float z)
{
fYaw+=y;
fPitch+=x;
fRoll+=z;
D3DXMatrixRotationYawPitchRoll(&matRot,fYaw,fPitch,fRoll);
}
|
Die Funktion, die deine Camera bewegt, sollte in etwa so aussehen:
Code: |
void MoveCamera(D3DXVECTOR3 vMove)
{
D3DXMatrixInverse(&matRot,NULL,&matRot); //du musst (glaube ich) die inverse Rotationsmatrix nehmen
D3DXVec3TransformCoord(&vMore,&matRot); //bewegung an rotation anpassen
D3DXMatrixInverse(&matRot,NULL,&matRot);
vPos+=vMove; //position anpassen
}
|
Ich habe den code nicht getestet, die Benutzung geschieht daher auf eigene Gefahr.  _________________ www.messiahzone.de.vu |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|