Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
schneidi74 Senior JLI'ler

Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 16.05.2005, 19:06 Titel: |
|
|
Also irgendwie krieg ich das noch nicht so recht auf die Reihe:
Mein letztes Ergebnis vor dem entgültigen Nervenzusammenbruch ist dieses:
ich habe eine Szene mit einem Raumschiff, das immer von hinten gesehen werden soll.
Jetzt habe ich als LookAt für meine Camera die Position des Schiffes angenommen. So far so good. Sollte wohl auch so funktionieren.
Wie bekomme ich es jetzt hin, das die Kamera immer im gleichen Abstand genau hinter den Triebwerken steht? <verzweifel>
Mein letzter Ansatz war:
CameraPosition.x += cosf(ObjectRotation.Y);
CameraPosition.z += -sinf(ObjectRotation.Y);
War aber auch mist
Bitte um Hilfe.... _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
 |
Fallen JLI MVP


Alter: 41 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 16.05.2005, 19:09 Titel: |
|
|
CameraPosition.x += cosf(ObjectRotation.Y) * Distanz;
CameraPosition.z += -sinf(ObjectRotation.Y) * Distanz;
Nebenbei:
LootAt ? Was hat looten mit der cam zu tun  _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 16.05.2005, 19:12 Titel: |
|
|
schneidi74
Ganz guter Ansatz, aber Du berechnest nur die neue Position im Einheitskreis und nicht von der Rotation, du musst also die Distanz draufaddieren bzw. im ggf. draufmultiplizieren.
CPP: | CameraPosition.x += cosf(ObjectRotation.Y);
CameraPosition.z += -sinf(ObjectRotation.Y); |
_________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
 |
HomeLess_PunkDrummer JLI Master Trainee

Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 17.05.2005, 18:19 Titel: |
|
|
Ui, das hatte ich vergessen.... Tut mir sorry  _________________ "Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz." |
|
Nach oben |
|
 |
schneidi74 Senior JLI'ler

Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 17.05.2005, 20:03 Titel: |
|
|
Also irgendwo hab ich da immer noch mist drin. Habe das jetzt soweit mal versucht abzuändern, aber die Kamera dreht sich nicht entsprechend dem Schiff. Habe das Projekt mal zur Anschauung hochgeladen, mit den Cursor Tasten Rechts bzw. Links kann man sich angucken was ich meine...
Test.rar
Die Drehung habe ich jetzt so implementiert:
CPP: | if(ceIsKeyDown(DIK_LEFT)) {
m_fObjectRotAngleY -= 0.5f * ceReturnTimeBetweenFrames();
m_fCamPosX += cosf(m_fObjectRotAngleY);
m_fCamPosZ += -sinf(m_fObjectRotAngleY);
} |
_________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
 |
LeeDiGer Super JLI'ler

Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 19.05.2005, 16:17 Titel: |
|
|
Mach es einfach so, wie ich es beschrieben hab. Dann wird sich die Kamera auch so bewegen, wie du es haben willst. _________________ Kein Rückzug! Kein Aufgeben! |
|
Nach oben |
|
 |
schneidi74 Senior JLI'ler

Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 19.05.2005, 19:56 Titel: |
|
|
Das hab ich versucht: Ich weiß nicht ob ich da vielleicht was falsch interpretiert habe.
Ich habe die Kamera auf eine Position knapp hinter dem x-file gesetzt. Bei einer Rotation dreht sich jetzt zwar x-file und kamera um den gleichen winkel (schonmal etwas) aber die Position der Kamera wird dadurch ja nicht verändert. Mit anderen Worten die Kamera bleib nicht hinter den Triebwerken des Raumschiffes sondern dreht so, das man quasi dann am schiff vorbeigucken kann, wenn du verstehst was ich meine. _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
 |
LeeDiGer Super JLI'ler

Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 19.05.2005, 20:22 Titel: |
|
|
Dann hast du die Vektoren falsch interpretiert. Poste mal, wie du genau die betroffenen Vektoren für die Objekt- und Kamerarotation und berechnet hast. _________________ Kein Rückzug! Kein Aufgeben! |
|
Nach oben |
|
 |
schneidi74 Senior JLI'ler

Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 19.05.2005, 20:31 Titel: |
|
|
OK, woll'n wa mal gucken ob wir alles zusammen kriegen:
in der Main:
CPP: | // Raumschiff rendern
m_Object->m_vPosition = m_vObjectPosition;
m_Object->SetRotation(m_fObjectRotAngleX,m_fObjectRotAngleY,m_fObjectRotAngleZ);
m_Object->RenderXFile();
m_Camera->SetCameraPosition( D3DXVECTOR3(m_fCamPosX,m_fCamPosY,m_fCamPosZ-10.0f) );
[...]
if(ceIsKeyDown(DIK_LEFT)) {
m_fObjectRotAngleY += 0.5f * ceReturnTimeBetweenFrames();
m_Camera->RotateCamera(0.0f,m_fObjectRotAngleY,0.0f);
//m_fCamPosX -= cosf(m_fObjectRotAngleY);
//m_fCamPosZ -= -sinf(m_fObjectRotAngleY);
}
|
In der Kameraklasse hab ich dann die Rotation:
CPP: | void CECamera::RotateCamera(float fXAngle, float fYAngle, float fZAngle)
{
m_Camera.m_vLookAt.x = sinf(fYAngle) + m_Camera.m_vPosition.x;
m_Camera.m_vLookAt.z = cosf(fYAngle) + m_Camera.m_vPosition.z;
}
|
Damit konnte ich dann wenigstens das raumschiff und die kamera im gleichen winkel drehen.
Eigentlich müsste ich jetzt nur noch die kamera an die richtige stelle kriegen... _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
 |
DirectXer Dark JLI'ler

Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 20.05.2005, 14:11 Titel: |
|
|
schneidi74 hat Folgendes geschrieben: |
CPP: | void CECamera::RotateCamera(float fXAngle, float fYAngle, float fZAngle)
{
m_Camera.m_vLookAt.x = sinf(fYAngle) + m_Camera.m_vPosition.x;
m_Camera.m_vLookAt.z = cosf(fYAngle) + m_Camera.m_vPosition.z;
}
|
Damit konnte ich dann wenigstens das raumschiff und die kamera im gleichen winkel drehen. |
Wieso übergibst du der Funktion 3 Winkel wenn du eh nur einen brauchst?
Und was meinst du mit schneidi74 hat Folgendes geschrieben: | Eigentlich müsste ich jetzt nur noch die kamera an die richtige stelle kriegen... | ? Was stimmt den net, X, Y oder Z Position?
Gruß DirectXer |
|
Nach oben |
|
 |
schneidi74 Senior JLI'ler

Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 20.05.2005, 14:51 Titel: |
|
|
Zitat: | Wieso übergibst du der Funktion 3 Winkel wenn du eh nur einen brauchst?
|
In weißer vorausschau für die Zukunft...
Zitat: |
? Was stimmt den net, X, Y oder Z Position?
|
Wohl die X und Z Position. Ich hatte weiter oben mal ein "Beispiel-Debug" gepostet wo man sehen kann was das Mistding macht...
Ich krieg einfach nicht die korrekte Position raus, die die Camera haben müsste nachdem das Raumschiff gedreht wurde. Da muss sich ja auch dann die Kamera auf einer Kreisbahn bewegt wieder hinter das Raumschiff setzen...?! _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
 |
DirectXer Dark JLI'ler

Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 20.05.2005, 15:41 Titel: |
|
|
d.h. da hackt die Y-Position? naja, du berechnest ja auch nur X- und Z-Position... Also für die Kamera-Y-Position kannst du entweder den Up-Vektor verändern oder direkt die Y-Position des LookAt-Vektors berechnen...
Gruß DirectXer |
|
Nach oben |
|
 |
HomeLess_PunkDrummer JLI Master Trainee

Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 20.05.2005, 15:52 Titel: |
|
|
Lass den Upvektor lieber in Ruhe...
Fang es lieber mal von Grund auf an:
Die Kamera ist hinter dem Schiff.
Also:
CPP: | vCam.x=sinf(CamRotX)*Distance*sinf(ShipRotationY)+vShipPos.x;
vCam.z=sinf(CamRotX)*Distance*cosf(ShipRotationY)+vShipPos.z;
vCam.y=cosf(CamRotX)*Distance;
|
DIe Kamera glotzt auf das Schiff.
Also:
Die Maus oder Tastatur dreht das Schiff, und damit auch die Kamera:
CPP: | ShipRotationY+=MouseAxisX*MouseSensivity;
|
Die Rotation um die x-Achse machst du selbst:
CPP: | CamRotX+=(CamRotX<-PI*0.8f||CamRotX>PI*0.8f)?0:MouseAxisY*MouseSensivity;
|
Is doch easy... du musstes nur vorher durchdenken...  _________________ "Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz." |
|
Nach oben |
|
 |
LeeDiGer Super JLI'ler

Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 20.05.2005, 21:09 Titel: |
|
|
schneidi74,
hast du diese Berechnungen mit Sinus und Cosinus aus dem JLI Beispielen?? Dann kann ich nur sagen, dass das keine gute idee für eine handliche Kameraführung im 3D Raum ist.
Außerdem solltest du besser mit den 3 Rotationsvektoren des Objektes arbeiten und diese direkt an die Kameravektoren übergeben, so wie ich das erklärt hab.
Aber noch vorweg: Kannst du dich mit deiner Kameraeinstellung überhaupt komplett frei bewegen ohne dass die Kameraführung nach oben oder unten begrenzt ist?
Wenn nicht, dann müssen wir nochmal daran arbeiten. _________________ Kein Rückzug! Kein Aufgeben! |
|
Nach oben |
|
 |
schneidi74 Senior JLI'ler

Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 21.05.2005, 21:19 Titel: |
|
|
Man sagt ja Einsicht ist der erste Weg zu Besserung. Also seh ich im Moment ein, dass ich zu doof für diese Sache bin und hoffe jetzt mal auf Besserung...
Zitat: | LeeDiGer: Aber noch vorweg: Kannst du dich mit deiner Kameraeinstellung überhaupt komplett frei bewegen ohne dass die Kameraführung nach oben oder unten begrenzt ist? |
Ich hab meine Camera-Klasse jetzt in soweit geändert, das ich in jedem Frame den aktuellen Up/LookAt und Positionsvektor angebe und in der Klasse einfach nur noch die ViewMatrix berechnet wird, daher ist keine Begrenzung drin.
Problem was ich bei deinem Tip habe ist, das ich auf die beschriebene art und Weise die Camera nach einer Drehung nicht hinter dem Object habe. Ich lasse die Camera ja lediglich auf den gleichen Punkt wie das Raumschiff gucken.
Ich muss ja wirklich sagen, hätte ich man damals in Mathe besser aufgepasst, dann würd mir das ganze jetzt glaub ich nicht so schwer fallen... _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
 |
|