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 

Kamera in OpenGL

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Catscratch1
Junior JLI'ler



Anmeldedatum: 20.01.2005
Beiträge: 98

Medaillen: Keine

BeitragVerfasst am: 14.03.2005, 19:55    Titel: Kamera in OpenGL Antworten mit Zitat

Hallo,

ich suche mich nun seit Tagen doof im Internet und habe immer noch keine passende Antwort gefunden.
Wie macht man in OpenGL eine Kamera die Vergleich mit einer in DirectX ist?
Würde mich freuen, wenn ich Links oder Codeschnippsel bekommen könnte.

Gruß

Cats
_________________
"Dispatcher und Scheduler sind wie Brüder, bloß anders"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



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

BeitragVerfasst am: 14.03.2005, 20:01    Titel: Antworten mit Zitat

Fragen wir mal so: Was meinst Du mit Kamera?

- Die VIEW_MATRIX die es in OpenGL nicht gibt sondern nur in Direct3D?
- Eine LookAt-Funktion?
oder was anderes?

Kamera ist ein sehr Breites Spektrum
_________________
'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
Catscratch1
Junior JLI'ler



Anmeldedatum: 20.01.2005
Beiträge: 98

Medaillen: Keine

BeitragVerfasst am: 14.03.2005, 20:21    Titel: Antworten mit Zitat

Genau,

ich meine die View Matrix, die zum einen ne Kamera Position und einen LookAt Vektor besitzt.
Außerdem eine Projection Matrix die Verzerrungswinkle, View Frustrum und Clipping Plane setzt, etc.
_________________
"Dispatcher und Scheduler sind wie Brüder, bloß anders"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



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

BeitragVerfasst am: 14.03.2005, 20:30    Titel: Antworten mit Zitat

Also die ViewMatrix ist eigentlich ganz leicht zu emulieren in OpenGL:

Es gibt 2 Funktionen für das Pushen und Poppen einer Matrix auf den Matrix-Stack!

läuft folgendermaßen ab:
CPP:
    // Matrizen Nullen
glLoadIdentity ();

    // LookAt ausführen für die View-Matrix
gluLookAt (blablabla);

    // ViewMatrix ist die unterste Matrix im Matrix-Stack!
glPushMatrix ();

    // Rendern und co

    // Stack aufräumen
glPopMatrix ();


Jetzt kann man für die LookAt die glu.lib includieren, jedoch halte ich persönlich von diesem Teil absolut nichts.

Unter OpenGL benutz ich eine kleine Eigenkreation: (ACHTUNG: läuft einwandfrei aber sehr dirty und unoptimiert, da noch von 1999 Very Happy)
CPP:
// /////////////////////////////////////////////////
// PUBLIC
//
// Setzt die Kamera
//
// [in] position: Die Position der Kamera
// [in] lookat: Wohin die Kamera sieht
// [in] up: Der Up-Vector der Kamera
// /////////////////////////////////////////////////
void CMatrix::lookAt (const CVector3D &position, const CVector3D &lookat, const CVector3D &up)
{
      // Kommende Optimierungen:
      // -----------------------
      // x,y,z ersetzen durch vega::CVector3D Objekte
      // Sowie berechnungen per vega::CVector3D Objekte
      //
      // Das Makro entfernen (Immer diese Testsachen :D)

   float x[3];
   float y[3];
   CVector3D z;

   z = position - lookat;

    float mag = z.length();

   if (mag)
   {
      z /= mag;
   }

   // Y vector
   y[0] = up.x;
   y[1] = up.y;
   y[2] = up.z;

   // X vector = Y cross Z
   x[0] =  y[1] * z.z - y[2] * z.y ;
   x[1] = -y[0] * z.z  + y[2] * z.x;
   x[2] =  y[0] * z.y - y[1] * z.x;

   // Recompute Y = Z cross X
   y[0] =  z.y * x[2] - z.z * x[1];
   y[1] = -z.x * x[2] + z.z * x[0];
   y[2] =  z.x * x[1] - z.y * x[0];

   mag = FastSqrtf(x[0] * x[0] + x[1] * x[1] + x[2] * x[2]);
   if (mag)
   {
      x[0] /= mag;
      x[1] /= mag;
      x[2] /= mag;
   }

   mag = FastSqrtf(y[0] * y[0] + y[1] * y[1] + y[2] * y[2]);
   if (mag)
   {
      y[0] /= mag;
      y[1] /= mag;
      y[2] /= mag;
   }

   CMatrix m;
   CMatrix t;

#define M(row,col)  m.matrix[col*4+row]
   M(0, 0) = x[0];
   M(0, 1) = x[1];
   M(0, 2) = x[2];
   M(0, 3) = 0.0f;

   M(1, 0) = y[0];
   M(1, 1) = y[1];
   M(1, 2) = y[2];
   M(1, 3) = 0.0f;

   M(2, 0) = z.x;
   M(2, 1) = z.y;
   M(2, 2) = z.z;
   M(2, 3) = 0.0f;

   M(3, 0) = 0.0f;
   M(3, 1) = 0.0f;
   M(3, 2) = 0.0f;
   M(3, 3) = 1.0f;

#undef M

   t.translate (position);
   
   t._41 = -t._41;
   t._42 = -t._42;
   t._43 = -t._43;

   (*this) = (m*t);
}


kann man dann folgendermaßen ausführen:
CPP:
            vega::CMatrix mat, mat2;
            mat.lookAt (vega::CVector3D(-2.5f, 0, -0.5f), vega::CVector3D(0, 0.5f, 0), vega::CVector3D(0,1,0));
         glMultMatrixf(mat.matrix);


- Patrick, der sich schämt wegen diesen altem Mist Very Happy
_________________
'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
Catscratch1
Junior JLI'ler



Anmeldedatum: 20.01.2005
Beiträge: 98

Medaillen: Keine

BeitragVerfasst am: 15.03.2005, 08:14    Titel: Antworten mit Zitat

Danke für den Tipp.
Aber ich denke ich nehm die glu Variante.
Sonst muss ich meinem Dozenten noch mehr erklären *G*
_________________
"Dispatcher und Scheduler sind wie Brüder, bloß anders"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
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