Autor Wątek: Obroty w lokalnej przestrzeni.  (Przeczytany 610 razy)

Offline Frondeus

  • Użytkownik

# Styczeń 02, 2010, 21:33:07
Mam mały problem.
Próbóję zrobić oborty koła od samochodu.
Gdy obracam np tylko w osi Y lub w Z to jest wszystko ok. (oborty są naturalne (Y jakby skręcał kierownicą Z jakby jechał).
Lecz gdy podczas "jazdy" proboje skrecic to efekt jest mizerny.. zupełnie jakby koło miało upaść.

 Dowiedziałem się już że trzeba przestawic polozenie na punkt 0.0.0 wykonac obroty i zmienic położenie na właściwe lecz to nie dziala(a dokładniej nie dizała jak zostawie w punkcie 0.0.0 zas aby przestawic spowrotem nie umiem(gdyz operuje na efektach a to utrudnia sprawe)  ).

I teraz pytanie: Jak to zrobic? Czy macierze wystarcza ?, czy moze trzeba się zabrać za kwateriony(mam o nich mgliste pojecie ale od czego jest google)


Offline Mr. Spam

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

Offline _OskaR

  • Użytkownik

# Styczeń 02, 2010, 21:47:11
Dowiedziałem się już że trzeba przestawic polozenie na punkt 0.0.0 wykonac obroty i zmienic położenie na właściwe lecz to nie dziala(a dokładniej nie dizała jak zostawie w punkcie 0.0.0 zas aby przestawic spowrotem nie umiem(gdyz operuje na efektach a to utrudnia sprawe)  ).
Tworzysz sobie koło ze środkiem w 0,0,0, obracasz za pomocą macierzy obrotu i przesuwasz, dodając do współrzędnych wierzchołków docelowe położenie środka koła. Nie powinno być problemu ze zrobieniem tego w VS. Jeśli szkoda tobie wektorów normalnych, to można je również obrócić.

Offline Frondeus

  • Użytkownik

# Styczeń 02, 2010, 22:08:06
No ten problem ze nie dziala.
Przestawiam jego polozenie na 0.0.0 potem obracam i dodaje polozenie i efekt ten sam
Robie tak:
Rotation.X += 5.0f * DeltaTime;
Rotation.Y += 25.0f * DeltaTime;
Position = Vector3(0.0.0);

D3DXMATRIX pS;


D3DXMATRIX pRX;
D3DXMATRIX pRY;
D3DXMATRIX pRZ;

D3DXMATRIX pTX;
D3DXMATRIX pTY;
D3DXMATRIX pTZ;

D3DXMatrixScaling(&pS,Scale.X,Scale.Y,Scale.Z);

D3DXMatrixRotationX(&pRX, Rotation.X);
D3DXMatrixRotationY(&pRY, Rotation.Y);
D3DXMatrixRotationZ(&pRZ, Rotation.Z);

D3DXMatrixTranslation(&pTX,Position.X,0,0);
D3DXMatrixTranslation(&pTY,0,Position.Y,0);
D3DXMatrixTranslation(&pTZ,0,0,Position.Z);


MatWorld = pS * pRY  * pRX * pRZ * pTX * pTY * pTZ;
pEffect->SetMatrix(...);
« Ostatnia zmiana: Styczeń 02, 2010, 22:09:52 wysłana przez Frondeus »