Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Dekompozicija matrice

[es] :: 3D programiranje :: Dekompozicija matrice

[ Pregleda: 4257 | Odgovora: 15 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
*.vdial.verat.net

ICQ: 208550327


+14 Profil

icon Dekompozicija matrice10.09.2004. u 18:36 - pre 207 meseci
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?
EOF
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
212.62.47.*

ICQ: 246436949


+10 Profil

icon Re: Dekompozicija matrice10.09.2004. u 19:00 - pre 207 meseci
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.
 
Odgovor na temu

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
*.vdial.verat.net

ICQ: 208550327


+14 Profil

icon Re: Dekompozicija matrice10.09.2004. u 19:11 - pre 207 meseci
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!
EOF
 
Odgovor na temu

bkaradzic
Branimir Karadžić
ArenaNet
Seattle, WA

Član broj: 14953
Poruke: 1630
..1.66.subscriber.vzavenue.net

Sajt: https://github.com/bkarad..


+11 Profil

icon Re: Dekompozicija matrice10.09.2004. u 19:25 - pre 207 meseci
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

 
Odgovor na temu

Reljam
Relja Markovic
San Francisco

Član broj: 531
Poruke: 1793
*.microsoft.com



+18 Profil

icon Re: Dekompozicija matrice10.09.2004. u 20:02 - pre 207 meseci
Igrom slucaja, ne samo da ima ta funkcija u D3DXu, nego je to i moj prvi D3D API :)

http://msdn.microsoft.com/libr...s/math/d3dxmatrixdecompose.asp
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
212.62.47.*

ICQ: 246436949


+10 Profil

icon Re: Dekompozicija matrice10.09.2004. u 20:21 - pre 207 meseci
Stvarno se divim timu koji radi na kreiranju DirectX-a... misle na sve :)
 
Odgovor na temu

Reljam
Relja Markovic
San Francisco

Član broj: 531
Poruke: 1793
*.microsoft.com



+18 Profil

icon Re: Dekompozicija matrice10.09.2004. u 21:14 - pre 207 meseci
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?

 
Odgovor na temu

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
*.vdial.verat.net

ICQ: 208550327


+14 Profil

icon Re: Dekompozicija matrice11.09.2004. u 13:12 - pre 207 meseci
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...
EOF
 
Odgovor na temu

Reljam
Relja Markovic
San Francisco

Član broj: 531
Poruke: 1793
*.client.comcast.net



+18 Profil

icon Re: Dekompozicija matrice11.09.2004. u 17:16 - pre 207 meseci
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.
 
Odgovor na temu

maxmagnus2
none
VA

Član broj: 3893
Poruke: 194
*.vdial.verat.net



Profil

icon Re: Dekompozicija matrice15.09.2004. u 01:02 - pre 207 meseci


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?

The sleeper has awaken
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
195.252.80.*

ICQ: 246436949


+10 Profil

icon Re: Dekompozicija matrice15.09.2004. u 08:17 - pre 207 meseci
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
 
Odgovor na temu

maxmagnus2
none
VA

Član broj: 3893
Poruke: 194
*.vdial.verat.net



Profil

icon Re: Dekompozicija matrice15.09.2004. u 09:04 - pre 207 meseci
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.
The sleeper has awaken
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
212.62.47.*

ICQ: 246436949


+10 Profil

icon Re: Dekompozicija matrice15.09.2004. u 17:14 - pre 207 meseci
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 :)
 
Odgovor na temu

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
*.vdial.verat.net

ICQ: 208550327


+14 Profil

icon Re: Dekompozicija matrice15.09.2004. u 19:39 - pre 207 meseci
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...
EOF
 
Odgovor na temu

maxmagnus2
none
VA

Član broj: 3893
Poruke: 194
*.vdial.verat.net



Profil

icon Re: Dekompozicija matrice17.09.2004. u 08:14 - pre 207 meseci
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?
The sleeper has awaken
 
Odgovor na temu

bkaradzic
Branimir Karadžić
ArenaNet
Seattle, WA

Član broj: 14953
Poruke: 1630
..1.66.subscriber.vzavenue.net

Sajt: https://github.com/bkarad..


+11 Profil

icon Re: Dekompozicija matrice17.09.2004. u 16:24 - pre 207 meseci
Citat:
maxmagnus2
Sta je QuanteriMoon ili kako se vec pise?


Piše se Quaternion.

Detaljan opis možeš naći na:
http://mathworld.wolfram.com/Quaternion.html
http://en.wikipedia.org/wiki/Quaternion

Branimir

 
Odgovor na temu

[es] :: 3D programiranje :: Dekompozicija matrice

[ Pregleda: 4257 | Odgovora: 15 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.