Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 15 odgovora
  • 6.355 pregleda

Najnovija ↓

Dekompozicija matrice 10.09.2004. u 19:36 · pre 269 meseci #1
Guglovao sam ali nista.

Problem je sledeci:
Ako rotiram objekat pomocu Quaterniona npr. oko neke ose:

AxisAngleRotation(CVector3 axis, float angle)

Ili pomocu matrica:

MatrixFromAxisAngle(CVector3 axis, angle)

Posle nekoliko ovakvih rotacija ne znam orijentaciju objekta: ugao prema x-osi, y i z.

U MAXSDK-u sam video funkciju DecompMatrix(...) ili tako nesto, koja "izvlaci" trenutne uglove iz matrice.Ne postoji implementacija f-je. Da li je uopste moguce dobiti uglove iz matrice nekom dekompozicijom? Trenutnu poziciju iz matrice znam da izvucem ( m[13], m[14], m[15] , valjda. Ne mogu se bas setiti koji su clanovi ali mislim da su ovi). Znaci, kako dobiti uglove iz matrice?
Potpis
EOF
Re: Dekompozicija matrice 10.09.2004. u 20:00 · pre 269 meseci #2
Zasto jednostavno ne koristis 3 promenljive koje ce drzati u sebi uglove rotacije oko x, y i z ose? Tako ces uvek znati kako ti je objekat okrenut.
Potpis
Play Store
Re: Dekompozicija matrice 10.09.2004. u 20:11 · pre 269 meseci #3
Da, ali sa bih izbegao Gimble Lock (primer koda)

glRotatef(60, 1, 0, 0) // po X osi
glRotatef(60, 0, 1, 0) // po Y osi
glRotatef(60, 0, 0, 1) // po Z osi

koristim Quaternion pa ga prebacujem u matricu:

CQuat q;
q.EulerToQuat(0, 30, 30);
CMatrix rot;
rot.QuatToMatrix(q);
itd...

Nema Gimble Locka-a i ovako mogu da pratim promenu uglova.

Ali ako hocu da rotiram objekat oko neke ose pod nekim uglom:

CQuat q;
q.AxisAngleToQuat(CVector3 vAxis, float fAngle) //npr vAxis(1, 0.5, 0) fAngle =30 deg

CMatrix rot;
rot.QuatToMatrix(q);
itd...

sada ne mogu da pratim promenu uglova posto se rotacija vrsi oko proizvoljne ose.
...

F1!
Potpis
EOF
Re: Dekompozicija matrice 10.09.2004. u 20:25 · pre 269 meseci #4
Citat:
glorius:Znaci, kako dobiti uglove iz matrice?


Ono što tražiš je:

ToEulerAnglesXYZ
http://www.magic-software.com/Source/Math/WmlMatrix3.inl

Citat:
glorius: Da, ali sa bih izbegao Gimble Lock (primer koda)


Mala ispravka: Gimbal Lock.

Branimir
Potpis
https://github.com/bkaradzic/bgfx
Re: Dekompozicija matrice 10.09.2004. u 21:21 · pre 269 meseci #6
Stvarno se divim timu koji radi na kreiranju DirectX-a... misle na sve :)
Potpis
Play Store
Re: Dekompozicija matrice 10.09.2004. u 22:14 · pre 269 meseci #7
Misle oni na kojesta, a da li to i urade... :)

To sto ta funkcija postoji nije razlog da koristis proste uglove, vec gledaj da sve radis preko matrica.

Sta ce ti dekomponovanje matrica?

Re: Dekompozicija matrice 11.09.2004. u 14:12 · pre 269 meseci #8
Hvala ljudi.

Sta ce mi dekompozicija matrice?

Radim u OpenGL (trenutno).
Dosta sam radio sa tim transformacijama i provalio da posle slozenih rotacija lakse mi je samo da izvucem iz matrice trenutne vrednosti uglova nego da pratim uglove...
Potpis
EOF
Re: Dekompozicija matrice 11.09.2004. u 18:16 · pre 269 meseci #9
Probaj da uopste ne koristis uglove, vec da sve radis preko matrica. Jer skoro sigurno tebi u stvari uglovi i ne trebaju, vec samo orijentacija, a to matrice rade mnogo bolje od uglova.

Pogledaj program koji radis i preispitaj da li ti uopste i trebaju uglovi.
Re: Dekompozicija matrice 15.09.2004. u 02:02 · pre 269 meseci #10


Citat:
Srki_82: Zasto jednostavno ne koristis 3 promenljive koje ce drzati u sebi uglove rotacije oko x, y i z ose? Tako ces uvek znati kako ti je objekat okrenut.


Kako kontrolises orijentacije pomocu samo jedne matrice?

Sta tacno radis, tj sta mnozis sa cim?
Potpis
The sleeper has awaken
Re: Dekompozicija matrice 15.09.2004. u 09:17 · pre 269 meseci #11
Ja radim ovako:

1. matrica: translacija objekta da njegov centar bude u 0,0,0

2. matrica: skaliranje

3. matrica: rotiranje (objekat ce biti rotiran oko svoje ose, ako hoces da ga rotiras oko neke druge tacke, moras da ga pre toga transliras)

4. matrica: transliranje na stvarnu poziciju

5. matrica: View matrica ili polozaj kamere

6. matrica: matrica koja projektuje 3D tacke u 2D tacke

kad sve te matrice pomnozis dobijes jednu koja kontrolise poziciju objekta na ekranu
Potpis
Play Store
Re: Dekompozicija matrice 15.09.2004. u 10:04 · pre 269 meseci #12
Citat:
Srki_82: Ja radim ovako:

1. matrica: translacija objekta da njegov centar bude u 0,0,0

2. matrica: skaliranje

3. matrica: rotiranje (objekat ce biti rotiran oko svoje ose, ako hoces da ga rotiras oko neke druge tacke, moras da ga pre toga transliras)

4. matrica: transliranje na stvarnu poziciju

5. matrica: View matrica ili polozaj kamere

6. matrica: matrica koja projektuje 3D tacke u 2D tacke

kad sve te matrice pomnozis dobijes jednu koja kontrolise poziciju objekta na ekranu


1. OK
2. skaliras za koje argumente matrice?
3.-||-
4.da li je to matrica kojom vracas sa 0,0,0 na prethodnu lokaciju tj matrica 1
samo sa *(-1) argumentima najnize kolone?
5. kako "vadis" ovu matricu?
6.Ovo ne znam sta je.
Potpis
The sleeper has awaken
Re: Dekompozicija matrice 15.09.2004. u 18:14 · pre 269 meseci #13
Ti peske mnozis matrice, sam ih punis i sve ostalo? Ako tako radis, ne mogu mnogo da ti pomognem jer ja koristim pomocne funkcije u DirectX-u koje to sve rade umesto mene. Npr. matricu za polocaj kamere dobijas ovako:

D3DXMatrixLookAtLH( mat, EyePt, LookAt, UpVec)

EyePt je koordinata iz koje gledas, LookAt je koordinata tacke u koju gledas, a UpVec je vektor koji govori na koju stranu je "gore". Na kraju u mat dobijas View matricu... a cak ni ne znas kako se ona uopste racuna :)
Potpis
Play Store
Re: Dekompozicija matrice 15.09.2004. u 20:39 · pre 269 meseci #14
Da, ali lepo je ponekad znati kako stvari rade tj. "zaviriti ispod haube" :)

U pravu ste, mnoge stvari se mogu uraditi i na drugi nacin. Ali kako pratiti uglove ako rotirate objekat oko neke ose, a ne striktno oko X, oko Y i oko Z;

Npr: ugao rotacije je 30 deg, a osa rotacije (1, 0, 1). Da li ovo znaci da se objekat rotira 30 deg oko X i 30 deg oko Z.

Koristim OpenGL, rotacija pomocu Quaterniona (nikako da zapamtim kako se pise).

Funkcija je AxisAngleToQuat(float angle, CVector3 rotVector) ...
Posle pretvorim Quat u matricu itd...
Potpis
EOF
Re: Dekompozicija matrice 17.09.2004. u 09:14 · pre 269 meseci #15
Citat:
glorius: Da, ali lepo je ponekad znati kako stvari rade tj. "zaviriti ispod haube" :)

U pravu ste, mnoge stvari se mogu uraditi i na drugi nacin. Ali kako pratiti uglove ako rotirate objekat oko neke ose, a ne striktno oko X, oko Y i oko Z;

Npr: ugao rotacije je 30 deg, a osa rotacije (1, 0, 1). Da li ovo znaci da se objekat rotira 30 deg oko X i 30 deg oko Z.

Koristim OpenGL, rotacija pomocu Quaterniona (nikako da zapamtim kako se pise).

Funkcija je AxisAngleToQuat(float angle, CVector3 rotVector) ...
Posle pretvorim Quat u matricu itd...


Sta je QuanteriMoon ili kako se vec pise?
Potpis
The sleeper has awaken
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme