JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

LootAt eines Objects
Gehe zu Seite Zurück  1, 2, 3  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 16.05.2005, 19:06    Titel: Antworten mit Zitat

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 Confused

Bitte um Hilfe....
_________________
-+- SchNeiDi74 -+-
-+- www.creative-games.de -+-
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Fallen
JLI MVP
JLI MVP


Alter: 41
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 16.05.2005, 19:09    Titel: Antworten mit Zitat

CameraPosition.x += cosf(ObjectRotation.Y) * Distanz;
CameraPosition.z += -sinf(ObjectRotation.Y) * Distanz;

Nebenbei:

LootAt ? Was hat looten mit der cam zu tun Wink
_________________
"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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 16.05.2005, 19:12    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 36
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 17.05.2005, 18:19    Titel: Antworten mit Zitat

Ui, das hatte ich vergessen.... Tut mir sorry Embarassed
_________________
"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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 17.05.2005, 20:03    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 19.05.2005, 16:17    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 19.05.2005, 19:56    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 19.05.2005, 20:22    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 19.05.2005, 20:31    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 20.05.2005, 14:11    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 20.05.2005, 14:51    Titel: Antworten mit Zitat

Zitat:
Wieso übergibst du der Funktion 3 Winkel wenn du eh nur einen brauchst?

In weißer vorausschau für die Zukunft... Cool

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 20.05.2005, 15:41    Titel: Antworten mit Zitat

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 Rolling Eyes oder direkt die Y-Position des LookAt-Vektors berechnen... Very Happy

Gruß DirectXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 36
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 20.05.2005, 15:52    Titel: Antworten mit Zitat

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:
CPP:
vLookAt=vShipPos;


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... Very Happy
_________________
"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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 20.05.2005, 21:09    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 21.05.2005, 21:19    Titel: Antworten mit Zitat

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... Confused

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Gehe zu Seite Zurück  1, 2, 3  Weiter
Seite 2 von 3

 
Gehe zu:  
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

Impressum