|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Faller Junior JLI'ler
Alter: 36 Anmeldedatum: 30.11.2006 Beiträge: 88 Wohnort: Dresden Medaillen: Keine
|
Verfasst am: 12.08.2007, 17:33 Titel: X Files Verstehen |
|
|
Ich will x Files auslesen.
So dort gibt es Animations Keys.
Es geht speziel um die Drehung.
Der Text der in den xfiles drinne steht zu den animations Keys
hab es durch 2 konverter gejagt solte also richtig sein.
AnimationSet AnimSet {
Animation anim_Box01 {
{frm_Box01}
AnimationKey {
0; 4; 1.000000, 0.000000, 0.000000, 0.000000;;,
1; 4; 0.653281, 0.653282, -0.270598, 0.270598;;,
2; 4; 0.500000, 0.500000, -0.500000, 0.500000;;,
3; 4; 1.000000, 0.000000, 0.000000, 0.000000;;,
4; 4; 0.707107, 0.000000, 0.707107, -0.000000;;,
5; 4; 0.707107, 0.000000, 0.707107, -0.000000;;;
6; 4; 0.923880, 0.000000, 0.382683, -0.000000;;;
und was ich angegegben habe im 3ds max.
Angegeben sind x,y,z werte die sich aus den oberren berechneen lassen müsten.
Alles Grad angaben.
0 0 0
90 45 0
90 90 0
0 0 0
0 0 90
0 0 90
0 0 45
Weis jemand wie man solche daten umrechnet?
Ich weis nicht nach was ich suchen soll google hilft da net weiter und die 3reiktx Doku auch net viel.
Mfg Faller _________________ versuche alles nur wann und wie ist die frage |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 12.08.2007, 18:27 Titel: |
|
|
naja, 90 Grad kann 0 ergeben und 45 Grad 0,707blub. Sieht also extrem nach sinus bzw. cosinus Werten aus. Nur n paar der anderen Kommazahlen sind irgendwie komsich. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 12.08.2007, 18:47 Titel: |
|
|
Sind das evtl Quaternations, 4 Zahlenwerte für eine Drehung, das scheint mir sehr danach auszusehen. Kann mich natürlich auch irren. _________________ "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 |
|
|
Tobias Mini JLI'ler
Alter: 34 Anmeldedatum: 20.02.2003 Beiträge: 13
Medaillen: Keine
|
Verfasst am: 13.08.2007, 08:09 Titel: |
|
|
Jo, das sieht sehr nach Quaterionons aus.
0 0 0 -> 1.000000, 0.000000, 0.000000, 0.000000 -> Einheitsquaternion
0 0 90 -> 0.707107, 0.000000, 0.707107, -0.000000 -> cos(90° / 2), x * sin(90° / 2), y * sin(90° / 2), z * sin(90° / 2)
Wobei hier offensichtlich beim Exportieren noch eine Umwandlung der Achsen von einem Koordinatensystem ins andere erfolgt ist, da sich die Drehung für z nun bei y befindet. _________________ http://www.alphanew.net/ (Last update: 10.12.2006)
|
|
Nach oben |
|
|
Faller Junior JLI'ler
Alter: 36 Anmeldedatum: 30.11.2006 Beiträge: 88 Wohnort: Dresden Medaillen: Keine
|
Verfasst am: 14.08.2007, 07:30 Titel: |
|
|
Ok es scheint so als ob das QUATERNION sind.
Thx für diese Auskunft.
Nun mein Problem wie rechne ich das in winkel um.
Denn ich brauche sie als winkel angaben.
Also Msn an und da hab ich mir dieses prog zusammen geschreiben.
#include<windows.h>
#include<d3dx9math.h>
#include<stdio.h>
void main()
{
D3DXQUATERNION test(0.000000f, 0.707107f, -0.000000f,0.707107f);
float y=90;
D3DXVECTOR3 da(0.0000f,0.0000f,0.0000f);
D3DXQuaternionToAxisAngle(&test,&da,&y);
printf("1=%f,\n2=%f,\n3=%f,\n4=",da.x,da.y,da.z);
}
Heraus kommt das was ja eindutig falsch ist weil das ist ja nur kopiert
0.000000
0.707107
0.000000
ist obwohl das minus zeichen fehlt.
Hat jemand ne ahnung wie man das ordentlich baut ???
zu tobias
0 0 0 -> 1.000000, 0.000000, 0.000000, 0.000000 -> Einheitsquaternion
ok das verstehe ich
0 0 90 -> 0.707107, 0.000000, 0.707107, -0.000000 -> cos(90° / 2), x * sin(90° / 2), y * sin(90° / 2), z * sin(90° / 2)
aber das net.
wenn ich das berechne bekomme ich ja nur eine zahl und net 4.
wäre net wenn mir das jemand erklären könnte.
fals jemand sowas schon gemacht hat könnte er mir tips geben wie man das umrechnet.
an alle thx die mir geholfen haben
mfg Faller _________________ versuche alles nur wann und wie ist die frage |
|
Nach oben |
|
|
Tobias Mini JLI'ler
Alter: 34 Anmeldedatum: 20.02.2003 Beiträge: 13
Medaillen: Keine
|
Verfasst am: 14.08.2007, 09:02 Titel: |
|
|
@Faller
0 0 90 -> 0.707107, 0.000000, 0.707107, -0.000000 -> cos(90° / 2), x * sin(90° / 2), y * sin(90° / 2), z * sin(90° / 2)
Also 4 Zahlen sollten schon rauskommen, sind ja Kommas dazwischen und kein Plus. Die erste Komponente, cos(theta / 2), ist w. Die darauffolgenden Komponenten sind x, y und z der Quaternion, definiert als n_x * sin(theta / 2), n_y * sin(theta / 2) und n_z * sin(theta / 2). Der Vektor n(n_x, n_y, n_z) ist dabei die Rotationsachse.
Die Quaternion 0.707107, 0.000000, 0.707107, -0.000000 beinhaltet dementsprechend einen Rotationswinkel von 90°, da w = 0.707107 = cos(theta / 2) = cos 45° und dementsprechend theta = 2 * 45° = 90°.
Wenn wir nun x, y und z der Quaternion durch sin(90° / 2) = 0.707107 teilen, erhalten wir
n_x = 0.0 / 0.707107 = 0.0
n_y = 0.707107 / 0.707107 = 1.0
n_z = 0.0 / 0.707107 = 0.0
Also den Vektor n(0.0, 1.0, 0.0), sozusagen die Y-Achse. Die Quaternion repräsentiert also eine 90° Drehung um die Y-Achse.
@Code
Der Code sollte eigentlich so funktionieren, wie du ihn geschrieben hast.
Code: | D3DXQUATERNION quaternion(0.0f, 0.707107f, 0.0f, 0.707107f);
D3DXVECTOR3 rotAxis;
float rotAngle;
D3DXQuaternionToAxisAngle(&quaternion, &rotAxis, &rotAngle); |
Sollte dementsprechend nach dem Funktionsaufruf rotAxis(0.0, 1.0, 0.0) zurückgeben und rotAngle = 1.570796. Habe das gerade eben mal durchprobiert, funktioniert tatsächlich nicht ganz so. D3DXQuaternionToAxisAngle spart sich offenbar das Teilen bei der Rotationsachse. Das macht im Grunde nichts, da ja alle Komponenten der Achse ein Vielfaches des selben Wertes sind. Je nach Zweck musst du die Achse dann anschließend einfach noch normalisieren. _________________ http://www.alphanew.net/ (Last update: 10.12.2006)
|
|
Nach oben |
|
|
Faller Junior JLI'ler
Alter: 36 Anmeldedatum: 30.11.2006 Beiträge: 88 Wohnort: Dresden Medaillen: Keine
|
Verfasst am: 14.08.2007, 18:33 Titel: |
|
|
ok also ich hab das mal ausprobiert aber ihrgentewie sthe ich aufm schlauch.
Auf gut hoch deutsch ich verstehe das net.
Wenn wir nun x, y und z der Quaternion durch sin(90° / 2) = 0.707107 teilen, erhalten wir
n_x = 0.0 / 0.707107 = 0.0
n_y = 0.707107 / 0.707107 = 1.0
n_z = 0.0 / 0.707107 = 0.0
ok ist klar
also hab ich es mal ausprobiert
meine werte
x=0;
y=90;
z=0;
was als Quadrions dann das ergibt
0.707107, 0.000000, -0.000000, 0.707107
w x z y
damit ergibt sich das die funktion so ausieht
x z y w
D3DXQUATERNION quaternion(0.000000f, -0.000000f, 0.707107f, 0.707107f);
dann die funktion
D3DXQuaternionToAxisAngle(&quaternion, &rotAxis, &rotAngle);
dann normaliziert
D3DXVec3Normalize(&rotAxis,&rotAxis);
so das ergebniss ist das
x=0;
y=1;
z=0;
rotangel =1.570796;
das soll deiner Meinung nach richtig sein ok.
1 frage dazu wie bekomme ich daraus die bogen mass angaben
90 grad wäre ja jetze sehr verlocken einfach jedes x,y,z mal rotangel =bogenmass.
Ist das so richtig ????
ok wenn das so wäre hab ich einfach mal ein 2 beispiel gemacht
die input werte sind (alles als grad)
x=0;
y=45;
z=90;
die berechneten werte für das x file sind
w x z y
0.653281, -0.270598, 0.653282, 0.270598
daraus ergibt sich folgender aufruff der funktion
D3DXQUATERNION quaternion(-0.270598f, 0.653282f, 0.270598f,0.653281f);
so dann normalisiert
D3DXVec3Normalize(&rotAxis,&rotAxis);
kommen folgende werte raus
x=-0.357406,
z=0.862856,
y=0.357406,
und als rotangel 1.717773 das
das haut ja mal sowas von gar net hin
also das normaliesierung raus genommen
x=-0.270598,
z=0.653282,
y=0.270598,
rotangel bleibt gleich 1.717773
so und wie rechne ich das jetze um damit ich mein bogenmas habe ???
ich weis net wie das gehen soll _________________ versuche alles nur wann und wie ist die frage |
|
Nach oben |
|
|
Tobias Mini JLI'ler
Alter: 34 Anmeldedatum: 20.02.2003 Beiträge: 13
Medaillen: Keine
|
Verfasst am: 15.08.2007, 08:55 Titel: |
|
|
Zitat: | so das ergebniss ist das
x=0;
y=1;
z=0;
rotangel =1.570796;
das soll deiner Meinung nach richtig sein ok.
1 frage dazu wie bekomme ich daraus die bogen mass angaben
90 grad wäre ja jetze sehr verlocken einfach jedes x,y,z mal rotangel =bogenmass.
Ist das so richtig ???? |
rotAngel = 1,570796 = 0.5 * PI = 90°
rotAxis = { 0.0, 1.0, 0.0 }
-> 90° Drehung um die Y-Achse
Zitat: | die input werte sind (alles als grad)
x=0;
y=45;
z=90;
[...]
kommen folgende werte raus
x=-0.357406,
z=0.862856,
y=0.357406,
und als rotangel 1.717773 das
das haut ja mal sowas von gar net hin |
Achtung! Quaternionen enthalten immer genau 1 Winkel und 1 Achse. D.h. du kannst nicht erwarten, deine 45° um die Y-Achse und deine 90° um die Z-Achse zu erhalten. Anstatt dessen erhälst du, getreu nach der Aussage, dass jede beliebige Rotation um die 3 Hauptachsen auch durch eine einzige Rotation um eine entsprechend ausgerichtete Raumachse dargestellt werden kann, diese Raumachse in rotAxis. Der Winkel rotAngle bezieht sich dabei nun auf die Rotation um diese Achse, nicht auf die Rotation um eine der Hauptachsen. Deshalb wird der Winkel mit Sicherheit auch weder 45° noch 90° sein. _________________ http://www.alphanew.net/ (Last update: 10.12.2006)
|
|
Nach oben |
|
|
Faller Junior JLI'ler
Alter: 36 Anmeldedatum: 30.11.2006 Beiträge: 88 Wohnort: Dresden Medaillen: Keine
|
Verfasst am: 15.08.2007, 09:31 Titel: |
|
|
ok die logig ich erhalte eine achse und eine Winkel.
versthe ich damit ergeben die daten auch einen Sinn.
die achse kann ich mir doch wie eine gerade durch die matrix forstehhelen oder??
und dann darauf eine winkel der die verschibung beschreibt.
wenn ich dann die achse einen bestimmten punkt nutze und mir durch den winkel den 2 punkt bestimme . Müsste ich mir doch meine winkel berechnen können oder.
Hauptfrage wie bekomme ich aus diesen Daten meine 3 winkel x,y und z.
oder ist das überhauptnicht mehr möglich.
das wäre ja müll wenn man das gar net mehr raus bekommt.
mfg ein verdunzter programmierer faller _________________ versuche alles nur wann und wie ist die frage |
|
Nach oben |
|
|
Tobias Mini JLI'ler
Alter: 34 Anmeldedatum: 20.02.2003 Beiträge: 13
Medaillen: Keine
|
Verfasst am: 15.08.2007, 09:46 Titel: |
|
|
Eine Quaternion lässt sich durchaus in eine Rotationsmatrix umwandeln, wie du richtig erkannt hast. Entspricht dem Erstellen einer Matrix aus einer beliebigen Achse und einem Rotationswinkel um diese Achse.
Und nunja, was vorwärts geht, geht meist auch rückwärts. Natürlich bekommst du deine 3 Winkel wieder raus, mit etwas Mathematik. Diese werde ich jetzt allerdings nicht hier ausführen, die findest du überall im Netz. Such dazu mal nach der Umwandlung von Quaternionen zu Euler-Winkeln. _________________ http://www.alphanew.net/ (Last update: 10.12.2006)
|
|
Nach oben |
|
|
Faller Junior JLI'ler
Alter: 36 Anmeldedatum: 30.11.2006 Beiträge: 88 Wohnort: Dresden Medaillen: Keine
|
Verfasst am: 15.08.2007, 11:02 Titel: |
|
|
die Quadrions werden ja extra so umgerechnet um in der informatik sie zu nutzen.
also wenn ich sie benutze müsste ich sie ja gar net erst umrechen.
derzeitig drehe ich mein objekt so wie im Buch
x,y und z sind also drehungen in grad und so werden sie genutzt.
D3DXMatrixRotationX(&objekt_drehungx,x);
D3DXMatrixRotationZ(&objekt_drehungz,z);
D3DXMatrixRotationY(&objekt_drehungy,y);
und berchne mir dann die end Matrix
D3DXMatrixMultiply(&zwm,&zwm,&objekt_drehungx);
D3DXMatrixMultiply(&zwm,&zwm,&objekt_drehungz);
D3DXMatrixMultiply(&zwm,&zwm,&objekt_drehungy);
wie geht das nun aber mit Quadritions.
in der dricktx doku hab ich das gefunden
D3DXMATRIX *D3DXMatrixTransformation(
D3DXMATRIX *pOut,
CONST D3DXVECTOR3 *pScalingCenter,
CONST D3DXQUATERNION *pScalingRotation,
CONST D3DXVECTOR3 *pScaling,
CONST D3DXVECTOR3 *pRotationCenter,
CONST D3DXQUATERNION *pRotation,
CONST D3DXVECTOR3 *pTranslation
);
könnte man net einfach die anderen werte auf 0 setzen und nur das quatrion angeben und die endmartis verrechenen und fertig.
kann es gerade net testen.
wenn net könnte mir jemand ja trotzdem erzählen mit welcher funktion sowas mach bar wäre.
mfg Faller _________________ versuche alles nur wann und wie ist die frage |
|
Nach oben |
|
|
Tobias Mini JLI'ler
Alter: 34 Anmeldedatum: 20.02.2003 Beiträge: 13
Medaillen: Keine
|
Verfasst am: 15.08.2007, 11:13 Titel: |
|
|
Wie gesagt, du kannst eine Quaternion über die Achse und den Winkel in eine Rotationsmatrix umwandeln. Die Beschaffenheit von Quaternions ermöglicht allerdings einige Optimierungen bei der Umwandlung zu Matrizen, weswegen die Funktion D3DXMatrixRotationQuaternion hier wohl die richtige Wahl wäre. Damit erhälst du auf einen Schlag die fertige Rotationsmatrix für alle 3 Drehungen auf den Hauptachsen.
D3DXMatrixTransformation kannst du natürlich auch benutzen, aber wenn du nur die Rotation brauchst, wohl etwas zu viel des Guten. _________________ http://www.alphanew.net/ (Last update: 10.12.2006)
|
|
Nach oben |
|
|
Faller Junior JLI'ler
Alter: 36 Anmeldedatum: 30.11.2006 Beiträge: 88 Wohnort: Dresden Medaillen: Keine
|
Verfasst am: 15.08.2007, 11:15 Titel: |
|
|
werde ich heute abend sofort aus testen doll sache es geht so einfach ne ich mach mir selbst das leben zur Hölle geil.
bis heute aben
mfg faller _________________ versuche alles nur wann und wie ist die frage |
|
Nach oben |
|
|
Dr. Best Senior JLI'ler
Alter: 34 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 15.08.2007, 13:54 Titel: |
|
|
Microsoft hat das *.x file format in der MSDN eigentlich sehr gründlich und gewissenhaft dokumentiert, das dürfte für dich außerordentlich hilfreich sein. Ich habe übrigens einen vollständigen *.x file loader (mit Animationen) für meine Engine geschrieben, das heißt wenn du irgendwelche konkreten Fragen oder so hast kannst du mich mal über ICQ, AIM oder MSN anschreiben. Zum Ende hin wird es immer ziemlich nervig Animationen aus Modelldateiformaten zu laden, weil man dann die dreißig Zweideutigkeiten in der Dokumentation, die man falsch ausgelegt hat finden muss. Ich weiß wovon ich rede, hab schon Loader für sechs verschiedene Formate geschrieben . _________________
Ich bin da, wer noch? |
|
Nach oben |
|
|
|
|
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
|