Autor Wątek: pozycje wierzchołków w modelach .md5  (Przeczytany 829 razy)

Offline Avaj

  • Użytkownik

# Styczeń 20, 2008, 19:17:05
Piszę właśnie loader dla modeli .md5 (w ramach treningu z animacją szkieletową, bo loader .md2 już mam) i za nic w świecie nie mogę dostosować pozycji wierzchołków. Najwięcej problemów mam z wierzchołkami kości które mają parenta do innych kości - stopy i dłonie są powykrzywiane na wszystkie strony. później wrzucę screenshoty.

czy ktoś z was pisał może taki loader i widzi coś nie tak w moim kodzie?

ustalanie położenia wierzchołków:
Kod: (cpp) [Zaznacz]
for (int z = 0;z<mdl.numMeshes;z++)
  {
  for (int i = 0; i < mdl.meshes[z].numVerts; i++)
  {
    Vector3 finalVertex(0.0f, 0.0f, 0.0f);

    for (int j = mdl.meshes[z].verts[i].weightIndex; j < mdl.meshes[z].verts[i].weightIndex+mdl.meshes[z].verts[i].weightElem; j++)
      {
        Weight *weight = &mdl.meshes[z].weights[j];
        Joint *joint = &mdl.joints[weight->jointIndex];

        Vector3 wv;

        Quaternion r = joint->rotation;
        Matrix4 mat = r.createMatrix();

        wv = mat*weight->position;
        finalVertex += (wv+joint->position)*weight->weightValue;
      };
      mdl.meshes[z].verts[i].finalPosition = finalVertex;
  };
  }

Kod: (cpp) [Zaznacz]
for (int j=0;j<mdl.numJoints;j++)
  {
    if (mdl.joints[j].parent>=0) {
      mdl.joints[j].rotation = mdl.joints[j].rotation*mdl.joints[mdl.joints[j].parent].rotation;
   };
   mdl.joints[j].rotation.normalize();
  };

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline kedan

  • Użytkownik

# Styczeń 20, 2008, 19:46:11
Nie pisałem nigdy loadera do md5, ale jeśli coś masz powykrzywiane (a nie poprzesuwane) to na mój gust sprawa rypie sie na kwaternionach, więc strzelam że coś nie tak jest tu:

       Quaternion r = joint->rotation;
        Matrix4 mat = r.createMatrix();

Albo konstruktory albo Qaternion::createMatrix(); Tudzież operatory przyrównania posprawdzaj;
« Ostatnia zmiana: Styczeń 20, 2008, 19:53:25 wysłana przez kedan »

Offline Avaj

  • Użytkownik

# Styczeń 20, 2008, 22:27:08
A niech to :/

zamiast bawić się z macierzami, od razu mnożyłem współrzędne przez kwaterniony... i działa, teraz będę musiał zobaczyć co jest nie tak