JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=c89ad62e21975872965e3ce9a6e95253Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Perspective-Matrix so dass ichs kapieren kann
Gehe zu Seite 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
HomeLess_PunkDrummer
JLI Master Trainee


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

BeitragVerfasst am: 21.04.2005, 10:47    Titel: Perspective-Matrix so dass ichs kapieren kann Antworten mit Zitat

Sorry, dass ich so eine bescheuerte Frage stelle, aber ich habe mindestens 10^4 Tutorals abgegrast und keines gefunden in dem erklärt wird wie man eine ordentlich Perspectiv-View- und ProjektionsMatrix OHNE D3DX erstellt. Eine orthogonale nützt mir nichts.

Weiß einer was. Hab schon ewig gesucht und bin relativ genervt. Thx
_________________
"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
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 21.04.2005, 13:32    Titel: Antworten mit Zitat

steht in der DX Doku, bei den Beschreibungen der D3DX funktionen
_________________
https://jonathank.de/games/
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: 21.04.2005, 13:35    Titel: Antworten mit Zitat

Tja ich hab ein Tutorial wo das alles drin steht Very Happy

CPP:
// ///////////////////////////////////////////////////////////////////////////
// PUBLIC
//
// Erstellt eine Projektionsmatrix!
// ///////////////////////////////////////////////////////////////////////////
void direct3d::createProjection (float fov, float aspect, float nearPlane, float farPlane) const
{
    if (::math::abs<float>(farPlane-nearPlane) < ::math::epsilon<float>::value)
        return;
    if (::math::abs<float>(::math::sin<float>(::math::deg2rad<float>(fov)/2)) < ::math::epsilon<float>::value)
        return;

        // Zwischenwerte berechnen
    const float cosin  = ::math::cos<float>(::math::deg2rad<float>(fov)/2) /
                         ::math::sin<float>(::math::deg2rad<float>(fov)/2);
    const float farinv = farPlane / (farPlane - nearPlane);

        // Temporäres Objekt
    static ::math::matrix temp;

        // Matrix verändern
    temp._11 = aspect*cosin;
    temp._22 = 1.0f*cosin;
    temp._33 = farinv;
    temp._34 = 1.0f;
    temp._43 = -farinv*nearPlane;
    temp._44 = 0.0f;

        // Projektionsmatrix setzen
    direct3d9device_->SetTransform (D3DTS_PROJECTION, &temp.getD3DMATRIX());
}


Cool
_________________
'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: 21.04.2005, 15:39    Titel: Antworten mit Zitat

Hmm Oops stand wirklich so in der Doku, auch das was Patrick gepostet hat, sorry Rolling Eyes

Shit, ich hab so lange nichts mit 3D-Sachen gemacht...
Was wär die beste Methode um eine Kamera zu drehen? Zwei Winkel und daraus immer neu den LookAt-Vektor berechnen und neu View aufsetzen? Oder Quaternionen?

Kann man irgendwie die Viewmatrix direkt modifizieren?
_________________
"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
Patrick
Dark JLI Master



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

BeitragVerfasst am: 21.04.2005, 15:45    Titel: Antworten mit Zitat

Es kommt drauf an was Du machen willst! Von Quaternions rate ich aus Prinzip her Anfängern wehement ab, da das Vorstellungsvermögen für die Mehrdimensionale Mathematik etwas höher liegt als nur "Einfache Matrizenrechnung" womit hier sowieso noch einige Probleme haben.

Am Besten beantwortest Du folgende Frage:
Was willst Du machen und wie hättest Du es gern?
_________________
'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: 21.04.2005, 15:52    Titel: Antworten mit Zitat

Hmm... Rolling Eyes
Im Moment versuch ich wieder mal eine Kamera aufzusetzen die ich bewegen kann.
Davon gibts ja zwei Sorten. Einmal mit Gimbal Lock (Hey, das war das erste was du mir erklärt hast als ich hier neu war Very Happy ) und einmal ohne.
Die mit ist zum Beispiel für Egoshooter gut, die ohne für Flugsimulationen.

Für die mit GimbalLock reichen zwei Winkel oder? Daraus kann ich den LookAt-Vektor berechnen:
CPP:
CustomMath::CustomVector3 vLookAt;
vLookAt.x= sin(RotY);
vLookAt.z= cos(RotY);
vLookAt.y= sin(RotX);
vLookAt.Normalize();
vLookAt=CustomMath::Vector3Add(vLookAt, vPosition);

// dann die ViewMatrix neu berechnen


Das geht ja noch. Aber wie geht das andere?
_________________
"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
Patrick
Dark JLI Master



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

BeitragVerfasst am: 21.04.2005, 15:59    Titel: Antworten mit Zitat

Für die mit GimbalLock rechnest Du ganz einfach eine EULA-Matrix aus.

Falls Dich interessiert wie man eine normale LookAt bastelt:
CPP:
// ///////////////////////////////////////////////////////////////////////////
// PUBLIC
//
// Kameramatrix berechnen
// ///////////////////////////////////////////////////////////////////////////
template<typename T> inline void basic_matrix<T>::lookAt (const basic_vector<T>& position, const basic_vector<T>& direction, const basic_vector<T>& up) const
{
        // Einheitsmatrix erstellen
    identity ();

        // Die z-Achse des Kamerakoordinatensystems berechnen
    basic_vector<T> zAxis ((direction - position).normalize());

        // Die x-Achse ist das Kreuzprodukt aus y- und z-Achse
    basic_vector<T> xAxis (up.crossProduct(zAxis).normalize());

        // y-Achse berechnen
    basic_vector<T> yAxis (zAxis.crossProduct(xAxis).normalize());

    // Rotationsmatrix erzeugen und die Translationsmatrix mir ihr multiplizieren
    static basic_matrix<T> trans;
    trans.translate (-position, true);

        // Matrizen multiplizieren und zuweisen
    (*this) = trans * matrix (xAxis.x,             yAxis.x,             zAxis.x,             static_cast<T>(0.0),
                              xAxis.y,             yAxis.y,             zAxis.y,             static_cast<T>(0.0),
                              xAxis.z,             yAxis.z,             zAxis.z,             static_cast<T>(0.0),
                              static_cast<T>(0.0), static_cast<T>(0.0), static_cast<T>(0.0), static_cast<T>(1.0));
}


Gefunden bei mir Very Happy
http://83.246.114.104/patrick/mathlib/mathlib_1.0.1.2.zip

Wink
_________________
'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: 21.04.2005, 16:03    Titel: Antworten mit Zitat

Hmm was isn ne Eula-Matrix? Google sagt nüx...

Des andere ist ja das erstellen der Viewmatrix, das habsch schon.
_________________
"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
HomeLess_PunkDrummer
JLI Master Trainee


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

BeitragVerfasst am: 22.04.2005, 13:58    Titel: Antworten mit Zitat

Eben nicht Smile

Sagt mir wenigstens noch ob meine Matrixmultiplikation richtig ist Smile
CPP:
CustomMath::CustomMatrix4x4 Mat;
Mat._11 = Mat1._11*Mat2._11+Mat1._12*Mat2._21+Mat1._13*Mat2._31+Mat1._14*Mat2._41;
Mat._21 = Mat1._21*Mat2._11+Mat1._22*Mat2._21+Mat1._23*Mat2._31+Mat1._24*Mat2._41;
Mat._31 = Mat1._31*Mat2._11+Mat1._32*Mat2._21+Mat1._33*Mat2._31+Mat1._34*Mat2._41;

// ....


Hmm?
_________________
"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
Patrick
Dark JLI Master



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

BeitragVerfasst am: 22.04.2005, 14:03    Titel: Antworten mit Zitat

Sieht beim Überfliegen richtig aus, falls Du Dir nicht sicher bist:

Hier ist meine:
CPP:
template<typename T> inline basic_matrix<T>& basic_matrix<T>::operator*= (const basic_matrix<T>& other)
{
    basic_matrix<T> temp (*this);
        // Zeile 1
    _11 = temp._11*other._11 + temp._12*other._21 + temp._13*other._31 + temp._14*other._41;
    _12 = temp._11*other._12 + temp._12*other._22 + temp._13*other._32 + temp._14*other._42;
    _13 = temp._11*other._13 + temp._12*other._23 + temp._13*other._33 + temp._14*other._43;
    _14 = temp._11*other._14 + temp._12*other._24 + temp._13*other._34 + temp._14*other._44;
        // Zeile 2
    _21 = temp._21*other._11 + temp._22*other._21 + temp._23*other._31 + temp._24*other._41;
    _22 = temp._21*other._12 + temp._22*other._22 + temp._23*other._32 + temp._24*other._42;
    _23 = temp._21*other._13 + temp._22*other._23 + temp._23*other._33 + temp._24*other._43;
    _24 = temp._21*other._14 + temp._22*other._24 + temp._23*other._34 + temp._24*other._44;
        // Zeile 3
    _31 = temp._31*other._11 + temp._32*other._21 + temp._33*other._31 + temp._34*other._41;
    _32 = temp._31*other._12 + temp._32*other._22 + temp._33*other._32 + temp._34*other._42;
    _33 = temp._31*other._13 + temp._32*other._23 + temp._33*other._33 + temp._34*other._43;
    _34 = temp._31*other._14 + temp._32*other._24 + temp._33*other._34 + temp._34*other._44;
        // Zeile 4
    _41 = temp._41*other._11 + temp._42*other._21 + temp._43*other._31 + temp._44*other._41;
    _42 = temp._41*other._12 + temp._42*other._22 + temp._43*other._32 + temp._44*other._42;
    _43 = temp._41*other._13 + temp._42*other._23 + temp._43*other._33 + temp._44*other._43;
    _44 = temp._41*other._14 + temp._42*other._24 + temp._43*other._34 + temp._44*other._44;

    return (*this);
}

_________________
'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: 22.04.2005, 14:13    Titel: Antworten mit Zitat

Hmm, das dürfte es sein. So war zumindest auch mein einzelner Gedankengang (hatte heut noch nicht viele) Smile

Thx, jetzt kann ich meinen D3DX-freien Würfel endlich rotieren. Smile
_________________
"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
Patrick
Dark JLI Master



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

BeitragVerfasst am: 22.04.2005, 14:46    Titel: Antworten mit Zitat

Du weißt ja:
Wenn 2 Matrizen multipliziert werden muss 'M' der Linken Matrix dem 'N' der Rechten Matrix entsprechen! Dann einfach die Zeilenvectoren der Linken Matrix mit den Spaltenvectoren der Rechten Multiplizieren und schwupp: Neue MxN Matrix ist da Very Happy

Achja:
Für Rotationen, Translationen, Invertierungen und Transponierungen findet sich einiges in meiner oben schon genannten Mathlib Very Happy Da siehste wie das dann berechnet wird in Grad und nicht in Radiat wie es die D3DX-Funktionen erwarten Wink
_________________
'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
DirectXer
Dark JLI'ler



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

BeitragVerfasst am: 22.04.2005, 18:30    Titel: Antworten mit Zitat

Wo kann man deine Math-Libary denn herkriegen??? Aus deiner Site? Wenn ja, schick mir die bitte ma Smile

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



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

BeitragVerfasst am: 22.04.2005, 18:37    Titel: Antworten mit Zitat

Meine Site: http://83.246.114.104/patrick/

Da direkt oberster Newseintrag!

Direkt: http://83.246.114.104/patrick/mathlib/mathlib_1.0.1.2.zip
_________________
'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
DirectXer
Dark JLI'ler



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

BeitragVerfasst am: 22.04.2005, 18:39    Titel: Antworten mit Zitat

ok, thx Very Happy
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 1, 2, 3  Weiter
Seite 1 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