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
Administrator
Hast du mal die Multiplikationsreihenfolge vertauscht?
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
FbxTime currTime; currTime.SetFrame(j, FbxTime::eFrames24); currBone->AnimationArray[i].KeyFrameArray[k].FrameNumber = k; FbxVector4 Rotate, Scale, Translate; FbxAMatrix currentTransformOffset = Node->EvaluateGlobalTransform(currTime) * GetGeometryTransformation(Node); FbxAMatrix GlobalTransform = currCluster->GetLink()->EvaluateLocalTransform(currTime); if (currBone->Parent){ GlobalTransform = GlobalTransform*currBone->Parent->AnimationArray[i].KeyFrameArray[k].GlobalTransform; } else{ GlobalTransform = currCluster->GetLink()->EvaluateGlobalTransform(currTime); } currBone->AnimationArray[i].KeyFrameArray[k].GlobalTransform = GlobalTransform; GlobalTransform = currentTransformOffset.Inverse()*GlobalTransform; Rotate = GlobalTransform.GetR(); currBone->AnimationArray[i].KeyFrameArray[k].Rotate.x = Rotate.mData[0]; currBone->AnimationArray[i].KeyFrameArray[k].Rotate.y = Rotate.mData[1]; currBone->AnimationArray[i].KeyFrameArray[k].Rotate.z = Rotate.mData[2]; Scale = GlobalTransform.GetS(); currBone->AnimationArray[i].KeyFrameArray[k].Scale.x = Scale.mData[0]; currBone->AnimationArray[i].KeyFrameArray[k].Scale.y = Scale.mData[1]; currBone->AnimationArray[i].KeyFrameArray[k].Scale.z = Scale.mData[2]; Translate = GlobalTransform.GetT(); currBone->AnimationArray[i].KeyFrameArray[k].Translate.x = Translate.mData[0]; currBone->AnimationArray[i].KeyFrameArray[k].Translate.y = Translate.mData[1]; currBone->AnimationArray[i].KeyFrameArray[k].Translate.z = Translate.mData[2]; k++; |
Administrator
Anstatt im Dunkeln zu stochern und uns mit Code zu überhäufen (den eh niemand liest), bau dir lieber - wie dir schon empfohlen wurde - ein paar einfache Testszenarien.
Z.B. ein langer Zylinder mit vielen Bones in einer Kette. Da kannst du einfacher sehen, was schief läuft.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Magogan« (29.09.2014, 16:57)
Administrator
Das ist glaub ich aber einfacher zu überschauen, wenn du einen langen Zylinder hast! Denn wenn du nur auf eine "Stange" aufpassen musst, kannst du viel leichter erkennen, wohin sich der Bone mit Mesh fälschlicherweise gedreht/verschoben hat. Bei einem Menschen mit Armen und Beinen, hast du nich viel mehr Bones und auch das Mesh ist viel komplizierter - du kannst nicht so einfach erkennen, wo dem Typen jetzt der Arm hängt oder wie das gedreht ist...Ob das Modell nun ein Zylinder oder ein Mensch oder ein Drache ist, ist dafür vollkommen irrelevant.
Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.
... und diese Signatur kürzer!
- übersichtlicher
- logischer
- verständlicher
Das ist glaub ich aber einfacher zu überschauen, wenn du einen langen Zylinder hast! Denn wenn du nur auf eine "Stange" aufpassen musst, kannst du viel leichter erkennen, wohin sich der Bone mit Mesh fälschlicherweise gedreht/verschoben hat. Bei einem Menschen mit Armen und Beinen, hast du nich viel mehr Bones und auch das Mesh ist viel komplizierter - du kannst nicht so einfach erkennen, wo dem Typen jetzt der Arm hängt oder wie das gedreht ist...Ob das Modell nun ein Zylinder oder ein Mensch oder ein Drache ist, ist dafür vollkommen irrelevant.
Auch das mit der Hirarchie lässt sich an einer Stange vielleichter austesten, als bei einem Menschen mit vielen komplizierten Abhängigkeiten!
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 |
struct Frame { string Name; // the frame or "bone" name Matrix TransformationMatrix; // to be used for local animation matrix MeshContainer MeshData; // perhaps only one or two frames will have mesh data FrameArray Children; // pointers or references to each child frame of this frame Matrix ToParent; // the local transform from bone-space to bone's parent-space Matrix ToRoot; // from bone-space to root-frame space }; |
Zitat
Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.
Werbeanzeige