ďťż

Ładny brzuch

Wykorzystałem możliwość zrobienia exportera do milkshape, dzięki czemu łatwo mogę obsługiwać modele 3d w moim małym silniku 3d. mam tylko jeden problem: w strukturze msBone jest wskaźnik do tablicy wektorów(struktura zawierająca x,y,z) pPositionKeys. wszystko byłoby ok, gdybym tylko wiedział w jaki sposób milkshape wyznacza te wektory przesunięcia. od razu mówię, że nie jest to zwykły wektor przesunięcia. nie wiem, może to jest wyznaczone w stosunku do nadrzędnej kości, ale tak raczej pasuje :blink: .



Wiesz, takie pytania to raczej zadawaj na warsztacie lub jakimś forum anglojęzycznym związanym blisko z Milkshapem, bo wątpię, żeby ktokolwiek tutaj pisał plugi do Milka, już szybciej do 3dsmaxa. A poza tym nie możesz poszukać w dokumentacji jakiejś?

Próbowałem się zarejestrować na warsztacie, ale jakiś błąd wyskakuje przy próbie stworzenia nowego konta. Dokumentacji plug-in'ów do ms raczej nie ma...


Próbowałem się zarejestrować na warsztacie, ale jakiś błąd wyskakuje przy próbie stworzenia nowego konta. Dokumentacji plug-in'ów do ms raczej nie ma...




Przy rejestracji błąd wyskakuje, ale dalej można się zalogować -> spróbuj :)


Ta? Mi tez wyskoczyl , ale nie moge sie zalogowac... :/

ok, działczy :) (stronka).


To nie wiem :/ -> mi wyskoczył bład jakiegoś insertu do tabeli, ale kiedy kliknąłem zaloguj i wpisałem dane, to działało ? ( takie szczęście miałem? 0_o )

W takim razie sami zobaczcie jak z tym jest, bo gdyby było jak mówił real_noname, to nie byłoby problemu:
<a href="http://republika.pl/gokudbz/avatar/frame1.JPG">klatka 1</a>
<a href="http://republika.pl/gokudbz/avatar/frame2.JPG">klatka 2</a>
<a href="http://republika.pl/gokudbz/avatar/frame3.JPG">klatka 3</a>
Prostszego nie mogłem wymyślić-mam nadzieje że sie skapniecie o co biega. w tym górnym lewym okienku(gdzie zmienia się położenie kości) jest oś xy.
współrzędne zwiększają się od lewego dolnego rogu do prawego górnego. zresztą po co ja to mówię. Pierwsze co dziwi to to, że zmienia się zamiast współrzędna x wektora to z!

Taka dobra rada - włącz sobie podpisy pod viewportami, bo nie moge się skapnąć w ich oriętacji :/

Przejrzałem dane i jak na razie wszystko się zgadza:
1. Masz pierwszą kość i jej wspołrzędne względem środka ekranu ( Joint1 )
2. Masz drugą kość (Joint2) i jest przesunięta względem poprzedniej o 19 punktów (chyba Z)
2. Masz trzecią (Joint3) i ona jest przesunięta względem drugiej (Joint2).

Animacja przedstawia przesunięcie względem oryginalego połorzenia, ale też jest nadal zachowana hierarchia kości, np. w klatce 3:
1. Pierwsza kość się nie zmieniła (wektor przesunięcia, jest zerowy) więc dodajesz oryginalne przesunięcie ( te pierwsze )
2. Druga kość się zmieniła: dodajesz do połorzenia kości nadrzędnej (Joint1) wektor oryginalny przesunięcia (ten podany na początku) a potem wektor przesunięcia w tej klatce.
3. Trzecia kość się zmieniła: dodajesz do wynikowego ( po przekształceniu )połorzenia kości nadrzędnej (Join2) wektor oryginalny przesunięcia (ten podany na początku) a potem wektor przesunięcia w tej klatce.

Chyba dość dobrze to wyjaśniłem :)


2. Masz drugą kość (Joint2) i jest przesunięta względem poprzedniej o 19 punktów (chyba Z)
No właśnie nie!!! nie wiem dlaczego tam jest z, zamiast x.
Masz tutaj poprawioną 3 klatkę(z viewportami):
http://republika.pl/...atar/frame3.JPG

Wszystko by się zgadzało, gdyby zamiast wektora [x,y,z] był [z, -y, x]! :blink:


No właśnie nie!!! nie wiem dlaczego tam jest z, zamiast x.
Masz tutaj poprawioną 3 klatkę(z viewportami):
http://republika.pl/...atar/frame3.JPG

błedu raczej nie ma, ale możesz coś więcej powiedzieć o tym kruczku w 3ds Max? no bo raczej to nie błąd programistów :\

jaki tam kruczek znowu. Kolesie po prostu uzywaja innego ukladu koordynatow 3D. Ty zapewne uzywasz Y-up, oni Z-up i tyle

pozdr.
st3tc


jaki tam kruczek znowu. Kolesie po prostu uzywaja innego ukladu koordynatow 3D. Ty zapewne uzywasz Y-up, oni Z-up i tyle

pozdr.
  st3tc

lol
czytajcie o czym pisza. st3tc napisal ze w 3dmaxie nie ma zadnego kruczka tylko jest Z-up

wektory przesunięcia prawidłowo(tzn. dla mnie) działają tylko, gdy kość "nie ma dzieci". dalej jest niezła kaszana. jeśli ktoś potrafi wytłumaczyc te wektory to proszę o wypowiedź.
Użytkownik gokudbz edytował ten post 07 maj 2005, 14:06

wektory przesunięcia prawidłowo(tzn. dla mnie) działają tylko, gdy kość "nie ma dzieci". dalej jest niezła kaszana. jeśli ktoś potrafi wytłumaczyc te wektory to proszę o wypowiedź.

rzeczywiście, ale moim zdaniem wygodniej byłoby to pominąć...
jak mam przekształacać te wektory jeśli wektor rotacji kości wynosi np. [1, 1, 0]?
dzięki


rzeczywiście, ale moim zdaniem wygodniej byłoby to pominąć...
jak mam przekształacać te wektory jeśli wektor rotacji kości wynosi np.  [1, 1, 0]?
dzięki

zrob sobie macierz i przemnoz co trzeba. jak eksportujesz do ascii to on czasem nie zapisuje gotowych macierzy przez ktore trzeba mnozyc?

// EDIT: Real_Noname: ale twoje obroty sa tylko wokol ustalonych osi?

masz tu kod ogolny:

void make_rotation_matrix (matrix33_t *M, vector_t *U, float alfa) { float cosine; float sine; __asm {  fld alfa  fsincos  fstp cosine  fstp sine } cosine = 1-cosine; float x2 = U->data[0]*U->data[0], y2 = U->data[1]*U->data[1], z2 = U->data[2]*U->data[2]; float xy = cosine*U->data[0]*U->data[1], xz = cosine*U->data[0]*U->data[2], yz = cosine*U->data[1]*U->data[2]; M->data[0] = 1 - cosine*(z2+y2); M->data[1] = sine * U->data[2] + xy; M->data[2] = -sine * U->data[1] + xz; M->data[3] = -sine * U->data[2] + xy; M->data[4] = 1 - cosine*(x2+z2); M->data[5] = sine * U->data[0] + yz; M->data[6] = sine * U->data[1] + xz; M->data[7] = -sine * U->data[0] + yz; M->data[8] = 1 - cosine*(y2+x2); }
Użytkownik marcepanowy_kapturek edytował ten post 07 maj 2005, 21:13

// EDIT: Real_Noname: ale twoje obroty sa tylko wokol ustalonych osi?

też się zdziwiłem gdy nie było kata oto definicja klasy kości:
typedef struct msPositionKey {    float       fTime;    msVec3      Position; } msPositionKey; /* msRotationKey */ typedef struct msRotationKey {    float   fTime;    msVec3  Rotation; } msRotationKey; /* msBone */ typedef struct msBone {    int             nFlags;    char            szName[MS_MAX_NAME];    char            szParentName[MS_MAX_NAME];    msVec3          Position;    msVec3          Rotation;    int             nNumPositionKeys;    int             nNumAllocedPositionKeys;    msPositionKey*  pPositionKeys;    int             nNumRotationKeys;    int             nNumAllocedRotationKeys;    msRotationKey*  pRotationKeys; char*   pszComment; } msBone;
Jak więc widzimy wektor obrotu jest tylko trójwymiarowy.

nie. wydaje mi sie ze z takiego zapisu wynika tylko jedno - to nie jest wektor wokol ktorego obracamy, tylko 3 floaty opisujace katy obrotu wokol osi X, Y, Z. tak mi sie wydaje. ale nie osi globalnego ukladu wspolrzednych, tylko pewnie lokalnego.

Też mi się tak wydaje, ale dla pewności:
gokudbz: wyciągnij do pliku te wektory i zobacz co tam się święci.

Pewnie katy są w radianach(a ja zamieniałem na int'y), oto rysunek:
http://republika.pl/...bz/avatar/4.jpg

noo, no to problem rozwiazany, prawda?

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •