Registriert: Mo Jun 12, 2006 14:47 Beiträge: 75
Programmiersprache: Object FPC
Hallo,
ich bin ein Nutzer von Newton.dll und wollte nun in anlehnung an diese hervoragende Physik enginge meinen Objecten auch die Möglichkeit geben eine Komplette Dreh, Positionsinfo zu erstellen.
Also in Newton gibts ne Möglichkeit die heist
Code:
NewtonBodyGetMatrix(NewtonBody,@Matrix[0,0]);
Matrix ist dabei vom Typ
Code:
TMatrix4f =Array[0..3,0..3]OfSingle;
man macht dann
Code:
glMultMatrixf(@Matrix[0,0]);
und kann sein Object Rendern und alles ist gut.
Das Functioniert wunderbar.
Also Dachte ich mir mache ich das auch
die Daten meines Objectes Habe ich nur Kriege ich sie nicht alle in die Matrix, da newton das schafft , mus es aber gehn. Ich weis nur net wie.
ich will gar nicht alles Umsetzen
nur
Code:
GLTranslatef(x,y,z);
Glrotatef(xr,1,0,0);
Glrotatef(yr,0,1,0);
Glrotatef(zr,0,0,1);
Also hab ich angefanden mal aus zu Probieren und habe auch viel rausbekommen.
die Diagonal Elemente mus ich immer auf 1 Lassen.
und Das Translatef ist auch kein Problem
Code:
Matrix[0,0]:=1;// Die Diagonalelemente müssen 1 sein
Matrix[0,1]:=0;// Verzerren um die X - Achse
Matrix[0,2]:=0;// Verzerren um die Y - Achse
Matrix[0,3]:=0;// Bedeutung unbekannt
Matrix[1,0]:=0;// Bedeutung unbekannt
Matrix[1,1]:=1;// Die Diagonalelemente müssen 1 sein
Matrix[1,2]:=0;// Verzerren um die Z - Achse
Matrix[1,3]:=0;// Bedeutung unbekannt
Matrix[2,0]:=0;// Bedeutung unbekannt
Matrix[2,1]:=0;// Bedeutung unbekannt
Matrix[2,2]:=1;// Die Diagonalelemente müssen 1 sein
Matrix[2,3]:=0;// Bedeutung unbekannt
Matrix[3,0]:= x;// Die X - Position im Raum
Matrix[3,1]:= y;// Die Y - Position im Raum
Matrix[3,2]:= z;// Die Z - Position im Raum
Matrix[3,3]:=1;// Die Diagonalelemente müssen 1 sein
Mein Problem ist das ich die Drehungen nicht Rein bekomme.
Es mus aber Gehen denn bei Newton.dll Klappt es auch , die Frage ist nur wie Geht es weis das einer von Euch ?
Zuletzt geändert von Corpsman am Di Okt 24, 2006 19:57, insgesamt 2-mal geändert.
Ich biete Dir mal einen Auszug aus meinem Code an, allerdings ertellt dieser eine Rotation um einen Vektor, d.h. die Matrix beinhaltet gleichzeitig (in dieser Reihenfolge) Rotation um x, y und z Achse. Quasi Drei Rotationen hintereinander, als würdest Du erst um x, dann um y und dann um z rotieren und diese Matritzen gleich miteinander multiplizieren.
Code:
//Typedefs
TGLMatrix=Record
CaseBooleanof
True:(A:Array[0..15]of GLDouble);
False:(M:Array[0..3,0..3]of GLDouble);
// ATTENTION OpenGL stores Column-leading
// first index is Column, second is Row
// e.g.: 1st col, 3rd row would be [0,2] not [2,0]
hier sind sozusagen gleich alle Achsen verwurstet.
[edit]hab gelogen. erst wird um die Z-Achse Rotiert, dann um die (verdrehte) X-Achse, als letztes um die (2x verdrehte) Y-Achse. Das ist insofern wichtig, da die Multiplikation von Matritzen nicht dem Kommutativgesetz unterliegt. Diese Reihenfolge schien mir für mein Projekt am Sinnvollsten, da ich hauptsächlich um Z rotiert habe[/edit]
[edit2] Du kannst die Rotationsreihenfolge dennoch ändern, indem du Dir erst eine Rotationsmatrix um ey geben lässt, diese verarbeitest, dann eine um ez und so weiter[/edit2]
_________________ Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.
Also ich weiss nixht, wo Du x und y hernimmst, aber wenn Du um Z rotieren willst, musst du den Achsenvektor mit 0,0,1 angeben, also d.x:=0, d.y:=0,d.z:=1.
Desweiteren gibt Dir meine Funktion die fertige Rotationsmatrix wieder, diese musst Du dann einfach mit der aktuell gesetzten OpenGL-Matrix multiplizieren. Für eventuelle Scherungen musst Du natürlich eine eigene Matrix erzeugen und getrennt anwenden (Translationen kannst Du gleich in diese Matrix einbauen, da sie ja nur die letzte Spalte beeinflussen).
Falls Angle in Grad ist, musst Du natürlich durch 180 teilen und mal pi nehmen, nicht andersherum.
p.s. erst jetzt entdeckt: In der Funktion darfst Du Sin und Cos NICHT null setzen, da durch die Verwurstung der drei Rotationen die z-Rotation alle Elemente, die gesetzt werden beinflusst.
_________________ Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.
Ohne Informationen, was Du mit Deiner Result-Variable machst, kann ich nur Kaffeesatz lesen. Sprich: etwas Code, was mit der Matrix passier und evtl. nen Screenshot wäre toll
_________________ Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.
Fällt mir jetzt nix Ungewöhnliches dran auf, ausser, dass, falls Du keine Verschachtelungen der Elemente hast, du diese Matrix einfach als Projektionsmatrix setzen kannst.
Falls Du allerdings Verschachtelungen hast und Du ein 'schwarzes Loch' Phänomen beobachtest, kanns noch daran Liegen, dass die Rotationen/Verscheibungen der einzelnen Elemente nicht relativ zum übergeordneten, sondern zur Welt angegeben sind. Dann musst Du in jedem Fall diese Matrix einfach setzen und nicht mit der aktuellen multiplizieren.
_________________ Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.
Kannst ja spaseshalber mal meine Matrix nehmen und die Formeln mit x=0 und y=0 vereinfachen. Dann sollte eigentlich die Matrix von dem Mathe-Studenten rauskommen. Wenn nicht, hab ich was falsch gemacht.
Ich hab quasi jeweils ne Rotation um x,y und z genommen und die resultierenden Matritzen multiliziert.
Dadurch ergeben sich dann diese Formeln. Wenn man die Reihenfolge der Multiplikation ändert, ergeben sich ganz andere Formeln für die einzelnen Elemente. Meine Berechnung ist also nur eine von sechs möglichen Kombinationen.
_________________ Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.
Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.