Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

1

07.07.2009, 20:52

MS3D Loader: Bone Rotations Problem

Hallo,

anders als die meisten anderen 3D Formate speichert Milkshape3D (MS3D) für die Rotation der Bones (oder "Joints") nur einen 3 Komponenten Vektor ab (x, y und z).
Normaler Weise werden Rotationen bei Skelet-Animationen ja mit Quaternionen (x, y, z und w) gemacht. Aus dem Code der Irrlicht Engine entnehme ich, dass man eine Matrix Rotation (setRotationRadians) durchführen muss.
Trotzdem stimmen bei mir die Rotationen noch nicht.
Worauf muss man bei diesem Format mit den Rotationen achten?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

07.07.2009, 21:34

Re: MS3D Loader: Bone Rotations Problem

Zitat von »"LukasBanana"«

Worauf muss man bei diesem Format mit den Rotationen achten?


Hehe, das ms3d Format hat mich schon unzälige Stunden gekostet...
Es verwendet ein rechtshändiges Koordinatensystem. Drehst du die z-Achse um? Wenn ja musst du dann dran denken die x und y Rotationswinkel zu negieren ;)
Reihenfolge der Rotationen ist x, y, z.

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

3

07.07.2009, 21:52

Wenn ich die Z-Achse schon 'umdrehe' ( also z = -z; ) was meinst du dann mit x und y und negieren? Vielleich 360 - x und 360 - y?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

07.07.2009, 21:53

naja x = 360° - x sollte eigentlich winkelmäßig das selbe geben wie x = -x ;)
ich mein also eines von beiden...

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

5

07.07.2009, 21:56

Gut aber worin leigt dann der Unterschied zwischen umdrehen und negieren?

meinst du:
x = -x;
y = -y;
z = -z;

oder nur:
x = x;
y = y;
z = -z;

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

07.07.2009, 22:02

wenn du deine vertexposition von links in rechtshändig umwandelst indem du die z koordinate negierst (vertex.z = - vertex.z) dann musst du die rotationswinkel um x und y auch negieren da sich ja die richtung in die der winkel gemessen wird geändert hat (uhrzeigersinn -> gegenuhrzeigersinn)...

http://dot.m4studios.at/spde/spde070709.svg

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

7

07.07.2009, 22:44

Solltest dus brauchen, ich hab eine MS3D Loader und BoneAnimation Klasse...
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

8

08.07.2009, 11:27

Zitat von »"Black-Panther"«

Solltest dus brauchen, ich hab eine MS3D Loader und BoneAnimation Klasse...


Klar gerne nur her damit, dann kann ich mir das mal genauer anschauen.

@dot: danke schon mal, leider funktioniert das bei mir doch nicht ganz so leicht. Jedoch verwende ich Links-händiges Koordinaten System und negiere daher die Z-Achse für alle Vertices und Positionen.

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

9

08.07.2009, 11:49

Den ganzen Code poste ich hier nicht... meld dich per pn...
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

10

10.07.2009, 19:03

Ich habe noch mal einem Frage zu MS3D, bezüglich der Struktur "Keyframe"

C-/C++-Quelltext

1
2
3
4
5
struct ms3dKeyframe
{
    float Time;
    float Vector[3];
};

Die Komponente "Time" ist merkwürdiger Weise vom Typ "float".
Normaler Weise wird das doch als "int" oder "long", zumindest als ganz Zahlen Typ angegeben, damit man zwischen den Frames interpolieren kann.
Das Problem ist nämlich, dass mir anscheinend noch jede menge Keyframes fehlen.
Ich habe ein paar Modelle die ich sowohl in B3D als auch in MS3D vorliegen habe. In dem einen B3D Modell habe ich 400 Keyframes - wie es auch in der Animation-Sequenz-Beschreibung steht - und in dem MS3D Modell nur ne ganz kleine krumme Zahl.

Ich B3D sind auch nicht alle 400 Keyframes gespichert.
Wenn "Time" von 1 auf 3 springt muss man das 2. Frame zwischen dem 1. und 3. beim Laden und Erstellen der Animation Inpoloieren und diese extra hinzufügen.

Lange Rede, kurzer Sinn: Wie ist die Komponente "float Time" bei MS3D zu interpretieren?

Werbeanzeige