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

Dekompozicija matrice

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

[ Pregleda: 1446 | Odgovora: 15 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

glorius
Damir Nikolic
Developer, Seavus D.O.O.
YU

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



Profil

icon Dekompozicija matrice10.09.2004. u 18:36

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
10.09.2004. u 18:36 

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1402
212.62.47.*

ICQ: 246436949


Profil

icon Re: Dekompozicija matrice10.09.2004. u 19:00
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.
DirectX na srpskom | GLScene na srpskom

There are only 10 types of people in this world; those who understand binary and those who don't.
10.09.2004. u 19:00 

glorius
Damir Nikolic
Developer, Seavus D.O.O.
YU

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



Profil

icon Re: Dekompozicija matrice10.09.2004. u 19:11
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
10.09.2004. u 19:11 

bkaradzic
Branimir Karadžić
EA/Pandemic
Los Angeles, CA

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

Sajt: www.mercs2.com


Profil

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

Reljam
Relja Markovic
Seattle, WA

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

Sajt: www.linkedin.com/in/relja..


Profil

icon Re: Dekompozicija matrice10.09.2004. u 20:02
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
10.09.2004. u 20:02 

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1402
212.62.47.*

ICQ: 246436949


Profil

icon Re: Dekompozicija matrice10.09.2004. u 20:21
Stvarno se divim timu koji radi na kreiranju DirectX-a... misle na sve :)
DirectX na srpskom | GLScene na srpskom

There are only 10 types of people in this world; those who understand binary and those who don't.
10.09.2004. u 20:21 

Reljam
Relja Markovic
Seattle, WA

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

Sajt: www.linkedin.com/in/relja..


Profil

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

10.09.2004. u 21:14 

glorius
Damir Nikolic
Developer, Seavus D.O.O.
YU

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



Profil

icon Re: Dekompozicija matrice11.09.2004. u 13:12
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
11.09.2004. u 13:12 

Reljam
Relja Markovic
Seattle, WA

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

Sajt: www.linkedin.com/in/relja..


Profil

icon Re: Dekompozicija matrice11.09.2004. u 17:16
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.
11.09.2004. u 17:16 

maxmagnus2
VA

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



Profil

icon Re: Dekompozicija matrice15.09.2004. u 01:02


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
15.09.2004. u 01:02 

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1402
195.252.80.*

ICQ: 246436949


Profil

icon Re: Dekompozicija matrice15.09.2004. u 08:17
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
DirectX na srpskom | GLScene na srpskom

There are only 10 types of people in this world; those who understand binary and those who don't.
15.09.2004. u 08:17 

maxmagnus2
VA

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



Profil

icon Re: Dekompozicija matrice15.09.2004. u 09:04
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
15.09.2004. u 09:04 

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1402
212.62.47.*

ICQ: 246436949


Profil

icon Re: Dekompozicija matrice15.09.2004. u 17:14
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 :)
DirectX na srpskom | GLScene na srpskom

There are only 10 types of people in this world; those who understand binary and those who don't.
15.09.2004. u 17:14 

glorius
Damir Nikolic
Developer, Seavus D.O.O.
YU

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



Profil

icon Re: Dekompozicija matrice15.09.2004. u 19:39
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
15.09.2004. u 19:39 

maxmagnus2
VA

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



Profil

icon Re: Dekompozicija matrice17.09.2004. u 08:14
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
17.09.2004. u 08:14 

bkaradzic
Branimir Karadžić
EA/Pandemic
Los Angeles, CA

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

Sajt: www.mercs2.com


Profil

icon Re: Dekompozicija matrice17.09.2004. u 16:24
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
17.09.2004. u 16:24 

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

[ Pregleda: 1446 | Odgovora: 15 ]

Postavi temu Odgovori

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