JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

World matrix berechnen.

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



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 17.07.2003, 18:42    Titel: World matrix berechnen. Antworten mit Zitat

hi!
Ich will ein Objekt um alle 3 Achsen rotieren, es dann noch verschieben und dann nochmal Scalen, und dann rendern. Ich hab gedacht ich mach das ganze so:
Code:

D3DXMatrixTranslation( &l_matTranslation,            //Translation matrix
                     lpModel->m_cTransformation.m_fTranslation[0], //on the x - axis
                     lpModel->m_cTransformation.m_fTranslation[1], //on the y - axis
                     lpModel->m_cTransformation.m_fTranslation[2]);//on the z - axis
   D3DXMatrixRotationX( &l_matRotation,               //Rotation on X-Axis
                   D3DXToRadian( lpModel->m_cTransformation.m_fRotation[0] ); //radians
   D3DXMatrixRotationY( &l_matRotation,               //Rotation on Y-Axis
                   D3DXToRadian( lpModel->m_cTransformation.m_fRotation[1] ); //radians
   D3DXMatrixRotationZ( &l_matRotation,               //Rotation on Z-Axis
                   D3DXToRadian( lpModel->m_cTransformation.m_fRotation[2] ); //radians
   D3DXMatrixScaling( &l_matScalation,                  //Scalation matrix
                  lpModel->m_cTransformation.m_fScalation[0],   //Scalation on x-axis
                  lpModel->m_cTransformation.m_fScalation[1],   //y-axis
                  lpModel->m_cTransformation.m_fScalation[2] );//z-axis


Ich hab dann 5 Matrices. Wie berechne ich aus diesem ganzen Haufen dann nun die Weltmatrix?

Oder gibt es einen besseren Weg?


Thx
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 17.07.2003, 21:15    Titel: Antworten mit Zitat

Also wie ich das sehe überschreibst du die Matrix l_matRotation doch jedes mal wieder, oder? Ansonsten muss die Matrizen zusammen multiplizieren. Guck dir doch mal die Funktionen D3DXMatrixRotationYawPitchRoll() oder D3DXMatrixRotationAxis() an. Vielleicht kannst du die nutzen.

Christian
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
VerruecktesHuhn
Super JLI'ler



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 18.07.2003, 13:36    Titel: Antworten mit Zitat

Hi
Danke, ich werd das jetzt mit dem "D3DXMatrixRotationYawPitchRoll()" machen. Die andere Funktion rotiert das Objekt nur um eine selbstdefinierte Axe, und das wollte ich nicht.

Wie genau multipliziere ich daraus ne Worldmatrix? Erst Rotation mit Scalation, dann Translation mit dem ergebniss der ersten Multiplikation und dann die Worldmatrix mit dem 2ten Ergebniss, oder wie?

Bin nich so der mega was diese Art der Mathematik belangt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 18.07.2003, 14:09    Titel: Antworten mit Zitat

Dass kommt immer drauf an, was du willst, soll sich dein Objekt erst um die eigene Achse drehen und dann verschieben. Ich würde mal sowas probieren:

D3DXMatrixIdentity(&m_Worldmatrix);
D3DXMatrixMultiply(&m_WorldMatrix,&m_WorldMatrix,&ScaleMatrix);
D3DXMatrixMultiply(&m_WorldMatrix,&RotMatrix,&TransMatrix);

Christian
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
VerruecktesHuhn
Super JLI'ler



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 18.07.2003, 17:55    Titel: Antworten mit Zitat

Ok, ich werds mal so versuchen.

Ist es nicht eigentlich egal, wie rum man das macht? Ich meine es wird ja zwischendurch nich gerendert, oder ist da ein mathematischer unterschied?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


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

BeitragVerfasst am: 11.08.2003, 20:09    Titel: Antworten mit Zitat

Hier mal ne kleine Funktion für dich (DX9):

Code:

D3DXMATRIX CreateMatrix(D3DVECTOR loc,D3DVECTOR scale,float yaw,float pitch,float roll)
{
    D3DXMATRIX matWorld, // World matrix being constructed.
              matTemp,  // Temp matrix for rotations.
              matRot,   // Final rotation matrix (applied to matWorld).
              matScale;

    // Using the right-to-left order of matrix concatenation,
    // apply the translation to the object's world position
    // before applying the rotations.
    D3DXMatrixTranslation(&matWorld, loc.x,loc.y,loc.z);
    D3DXMatrixScaling(&matScale, scale.x, scale.y,scale.z );
    D3DXMatrixMultiply(&matWorld,&matWorld,&matScale);
    D3DXMatrixIdentity(&matRot);

    //
    // Now, apply the orientation variables into the
    // world matrix
    //
    if(pitch || yaw || roll)
    {
        // Produce and combine the rotation matrices.
        D3DXMatrixRotationYawPitchRoll(&matTemp, -yaw,-pitch,roll);
        D3DXMatrixMultiply(&matRot,&matRot,&matTemp);
        // Apply the rotation matrices to complete the world matrix.
        D3DXMatrixMultiply(&matWorld, &matRot, &matWorld);
    }
    return (matWorld);
}


Du solltest auf die Reihenfolge der MatrixMultiplikationen achten besoners bein drehen, ändere das nach deinen Wünschen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 11.08.2003, 21:55    Titel: Antworten mit Zitat

Es gibt einen Mathematischen Unterschied. Stell dir das ganze doch mal Bildlich vor, am Beispiel eines Armes (Oberarm und Unterarm)
Der Oberarm ist am Körper befestigt und kann sich nicht verschieben, aber drehen. Der Unterarm muß sich dabei um den selben Punkt mitdrehen, wie der Oberarm und danach kann er nochmals um seinen eigenen Anschlußpunkt gedreht werden (Ellenbogen)
Würdest du die Reihnfolge verändern, würde der Unterarm in der Luft schweben.
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
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