JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

X Files Verstehen

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
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

BeitragVerfasst am: 12.08.2007, 17:33    Titel: X Files Verstehen Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


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

BeitragVerfasst am: 12.08.2007, 18:27    Titel: Antworten mit Zitat

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
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: 12.08.2007, 18:47    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Tobias
Mini JLI'ler


Alter: 34
Anmeldedatum: 20.02.2003
Beiträge: 13

Medaillen: Keine

BeitragVerfasst am: 13.08.2007, 08:09    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Faller
Junior JLI'ler


Alter: 36
Anmeldedatum: 30.11.2006
Beiträge: 88
Wohnort: Dresden
Medaillen: Keine

BeitragVerfasst am: 14.08.2007, 07:30    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Tobias
Mini JLI'ler


Alter: 34
Anmeldedatum: 20.02.2003
Beiträge: 13

Medaillen: Keine

BeitragVerfasst am: 14.08.2007, 09:02    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Faller
Junior JLI'ler


Alter: 36
Anmeldedatum: 30.11.2006
Beiträge: 88
Wohnort: Dresden
Medaillen: Keine

BeitragVerfasst am: 14.08.2007, 18:33    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Tobias
Mini JLI'ler


Alter: 34
Anmeldedatum: 20.02.2003
Beiträge: 13

Medaillen: Keine

BeitragVerfasst am: 15.08.2007, 08:55    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Faller
Junior JLI'ler


Alter: 36
Anmeldedatum: 30.11.2006
Beiträge: 88
Wohnort: Dresden
Medaillen: Keine

BeitragVerfasst am: 15.08.2007, 09:31    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Tobias
Mini JLI'ler


Alter: 34
Anmeldedatum: 20.02.2003
Beiträge: 13

Medaillen: Keine

BeitragVerfasst am: 15.08.2007, 09:46    Titel: Antworten mit Zitat

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. Smile 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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Faller
Junior JLI'ler


Alter: 36
Anmeldedatum: 30.11.2006
Beiträge: 88
Wohnort: Dresden
Medaillen: Keine

BeitragVerfasst am: 15.08.2007, 11:02    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Tobias
Mini JLI'ler


Alter: 34
Anmeldedatum: 20.02.2003
Beiträge: 13

Medaillen: Keine

BeitragVerfasst am: 15.08.2007, 11:13    Titel: Antworten mit Zitat

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. Smile
_________________
http://www.alphanew.net/ (Last update: 10.12.2006)

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Faller
Junior JLI'ler


Alter: 36
Anmeldedatum: 30.11.2006
Beiträge: 88
Wohnort: Dresden
Medaillen: Keine

BeitragVerfasst am: 15.08.2007, 11:15    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Dr. Best
Senior JLI'ler


Alter: 34
Anmeldedatum: 17.06.2004
Beiträge: 269
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 15.08.2007, 13:54    Titel: Antworten mit Zitat

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 Wink .
_________________

Ich bin da, wer noch?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name MSN Messenger
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