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

max-ov koordinatni sistem i kamera

[es] :: 3D programiranje :: max-ov koordinatni sistem i kamera

[ Pregleda: 4137 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

eva01

Član broj: 49540
Poruke: 120
*.ptt.yu.

Jabber: eva01@jabber.3gnt.org


Profil

icon max-ov koordinatni sistem i kamera09.04.2005. u 14:49 - pre 230 meseci
Izvrsio sam konverziju verteksa iz max-ovog koordinatnog sistema (right handed) u d3d-ov (left handed) tako sto sam izvrsio zamenu z i y koordinata verteksa. Takodje konverziju quaternion-a za animaciju sam odradio na taj nacin (kao bilo kog verteksa). Trenutno imam problema sa konverzijom tj. generisanjem matrice kamere.

Posto sam podatke uzimao iz ase fajla (nije bas najpametnija solucija) ono sto imam je:
xyz - polozaj kamere
rotAxis + angle - dakle od ovoga mogu da napravim jedan quaternion

Ono sto mi treba jeste da dobijem inverznu transformaciju od ove (zato sto je u pitanju kamera).

Inverzija za xyz je trivijalna ali mi nije jasno kako da invertujem rotaciju oko ose. Pokusao sam da napravim matricu preko D3DXMatrixRotationAxis a zatim da nadjem inverznu matricu od ove kao i da invertujem ugao rotacije ali nisam dobio prave rezultate.

Posto sam se bas raspisao da ponovim jos jednom sta me interesuje:
1. Dali sam dobro izvrsio transformaciju verteksa i quaterniona iz right-handed u left-handed koordinatni sistem ?
2. Kako da napravim matricu transformacije koja je inverzna transformaciji datoj sa rotAxis + angle ? (i kod rotAxis sam izvrsio zamenu y i z zbog promene koordinatnog sistema).
 
Odgovor na temu

nikbab
Nikola Babic
Belgrade

Član broj: 54474
Poruke: 8
*.scnet.yu.

Sajt: www.mechines.com


Profil

icon Re: max-ov koordinatni sistem i kamera10.04.2005. u 08:31 - pre 230 meseci
I ja sam nesto slicno radio za eksporter iz maxa za d3d format.

Evo koda:

/*
#define WRITE_MATRIX4_FROM_MATRIX3(pbCur, _matrix3) {Point3 __tempRow = ((Matrix3)_matrix3).GetRow(0);\
WRITE_POINT3(pbCur, __tempRow); WRITE_FLOAT(pbCur, 0);\
__tempRow = _matrix3.GetRow(1); WRITE_POINT3(pbCur, __tempRow); WRITE_FLOAT(pbCur, 0);\
__tempRow = _matrix3.GetRow(2); WRITE_POINT3(pbCur, __tempRow); WRITE_FLOAT(pbCur, 0);\
__tempRow = _matrix3.GetRow(3); WRITE_POINT3(pbCur, __tempRow); WRITE_FLOAT(pbCur, 1);}
*/

#define WRITE_MATRIX4_FROM_MATRIX3(pbCur, _matrix3) {\
Point3 __tempRow = ((Matrix3)_matrix3).GetRow(0); WRITE_POINT3_MODIFIKOVANO(pbCur, __tempRow); WRITE_FLOAT(pbCur, 0);\
__tempRow = _matrix3.GetRow(2); WRITE_POINT3_MODIFIKOVANO(pbCur, __tempRow); WRITE_FLOAT(pbCur, 0);\
__tempRow = _matrix3.GetRow(1); WRITE_POINT3_MODIFIKOVANO(pbCur, __tempRow); WRITE_FLOAT(pbCur, 0);\
__tempRow = _matrix3.GetRow(3); WRITE_POINT3_MODIFIKOVANO(pbCur, __tempRow); WRITE_FLOAT(pbCur, 1);}

Ovo sto je u komentaru je stara verzija a ovo MODIFIKOVANO je nova koja to radi kako treba. Obrati pzanju na _matrix3.GetRow(...) i bice ti jasno, samo prebaci da Row idu sledecim redosledom 2,1,3 umjesto 1,2,3.

poz
 
Odgovor na temu

reject
Ivan Pesic
Bgd

Član broj: 7659
Poruke: 2209
*.83.beocity.net.

Sajt: misc.comli.com


Profil

icon Re: max-ov koordinatni sistem i kamera10.04.2005. u 15:14 - pre 230 meseci
Ne zelim da mutim vodu, ali zasto ne koristis .X i
za meheve i za animacije? Max moze da ga exportuje.
Mass murder ain’t just painless,
Now we’ve made it cute.


The Church Of The Holy Transistor
 
Odgovor na temu

eva01

Član broj: 49540
Poruke: 120
*.ptt.yu.

Jabber: eva01@jabber.3gnt.org


Profil

icon Re: max-ov koordinatni sistem i kamera10.04.2005. u 22:39 - pre 230 meseci
Citat:
nikbab: I ja sam nesto slicno radio za eksporter iz maxa za d3d format.

Evo koda:

/*
#define WRITE_MATRIX4_FROM_MATRIX3(pbCur, _matrix3) {\
Point3 __tempRow = ((Matrix3)_matrix3).GetRow(0); WRITE_POINT3_MODIFIKOVANO(pbCur, __tempRow); WRITE_FLOAT(pbCur, 0);\
__tempRow = _matrix3.GetRow(2); WRITE_POINT3_MODIFIKOVANO(pbCur, __tempRow); WRITE_FLOAT(pbCur, 0);\
__tempRow = _matrix3.GetRow(1); WRITE_POINT3_MODIFIKOVANO(pbCur, __tempRow); WRITE_FLOAT(pbCur, 0);\
__tempRow = _matrix3.GetRow(3); WRITE_POINT3_MODIFIKOVANO(pbCur, __tempRow); WRITE_FLOAT(pbCur, 1);}

Ovo sto je u komentaru je stara verzija a ovo MODIFIKOVANO je nova koja to radi kako treba. Obrati pzanju na _matrix3.GetRow(...) i bice ti jasno, samo prebaci da Row idu sledecim redosledom 2,1,3 umjesto 1,2,3.

poz


Probao sam i nije dalo rezultate. Nisam ni uspeo da provalim gde kamera gleda.

Kako si transformisao vertekse iz RH u LH ?
Kako si transformisao quaternione za rotaciju ?
 
Odgovor na temu

eva01

Član broj: 49540
Poruke: 120
*.ptt.yu.

Jabber: eva01@jabber.3gnt.org


Profil

icon Re: max-ov koordinatni sistem i kamera10.04.2005. u 22:41 - pre 230 meseci
Citat:
reject: Ne zelim da mutim vodu, ali zasto ne koristis .X i
za meheve i za animacije? Max moze da ga exportuje.


Nema nekog narucitog razloga. Ranije sam radio sa ASE-om pa sam i sad hteo da ga upotrem. Verovatno mi je bilo pametnije da se odmah preorjentisem na X. Ipak ovde se vise radi o konverziji iz RH u LH sistem tako da to nije ni bitno.
 
Odgovor na temu

yooyo

Član broj: 4891
Poruke: 1101
*.in-addr.btopenworld.com.



Profil

icon Re: max-ov koordinatni sistem i kamera12.04.2005. u 15:47 - pre 230 meseci
Nije samo konverzija iz RH u LH problem. U pitanju je i glupavi MAX. OpenGL i D3D pretpostavljaju da je X osa horizontalna na ekranu, Y osa vertikalna, a Z osa prolazi kroz ekran. MAX ima drugaciji sistem, tj kod njega je Z osa vertikalna, a Y prolazi kroz ekran.

Resenje je da prvo transformises MAX-ov sistem u normalni pa tek onda da prebacujes iz RH u LH. U tvom slucaju posle rotacije oko X ose za 90 stepeni, Y osa pokazuje vertikalno na gore, X osa horizontalno na desno a Z osa ka posmatracu. Sada invertuj Z osu u matrici i dobices LH sistem.

ps.. Nisam 100% siguran da li je ovo OK... ali te nista ne kosta da probas. :)

yooyo
 
Odgovor na temu

eva01

Član broj: 49540
Poruke: 120
*.ptt.yu.

Jabber: eva01@jabber.3gnt.org


Profil

icon Re: max-ov koordinatni sistem i kamera12.04.2005. u 19:56 - pre 230 meseci
Izgleda da je to bilo u pitanju... Ustvari resio sam ovo malo pre tvog post-a ali tako sto sam rotaciju oko X ose dodao naknadno u matricu kamere (koju sam generisao a ne preuzeo iz max-a tj. ase-a) ali nije mi bilo jasno zasto je to potrebno.

Ustvari mislim da je nikbab-ov predlog bio ok. tj. radio je istu stvar (zamena 2 i 3 reda je isto kao zamena transformacija za z i y osu - ako lupam nek me neko ispravi) ali ja sam pograsno shvatio da je to potrebno uraditi na max-ovoj RH matrici.
 
Odgovor na temu

Nothingman

Član broj: 31375
Poruke: 308
*.teol.net.



+112 Profil

icon Re: max-ov koordinatni sistem i kamera12.04.2005. u 23:09 - pre 230 meseci
Hm, ja sam imao isti problem kad sam se nedavno zezao sa Quake 3 mapama i modelima. U Quake-u X-osa je horizontalna (smer na desno), Y-osa prolazi kroz ekran (smer prema tebi), Z-osa je vertikalna (smer na dole).
Iz ovog sto je yooyo napisao vidim da max i quake imaju izgleda isti koordinatni sistem (pitanje je samo da li je smer osa isti, dok je pravac identican).
Ja sam problem resio na sledeci nachin:
da bih izbegao te rotacije celo vreme dok se izvrsava program, za vreme startup-a sam jednim prolazom kroz sve vertexe, normale... swapovao njihove koordinate na sledeci nachin:
Code:

void Swap(VECTOR* v)
{
double tmp = v.y;
v.y = v.z;
v.z = -tmp;
}

Ovim sam transformisao quake koordinatni sistem u OpenGL koordinatni sistem.
Znachi ako je smer osa u max-u takav kakav sam gore opisao onda mozes koristiti ovu funkciju da ovavi posao, a ako nije onda je mozes na trivijalan nacin prilagoditi svojim potrebama.

Uvek sam se pitao zasto quake koristi tako glup koordinatni sistem i evo citajuci ovaj topic sam shvatio da nisu jedini...
Ili su mozda koristili max dok su pravili igru ;)

Q: Are there really any systems where
void main() doesn't work?
A: It has been reported that programs using void main() can crash.
Q: The book I've been using, _C Programing for the Compleat Idiot_,
always uses void main().
A: Perhaps its author counts himself among the target audience.
 
Odgovor na temu

eva01

Član broj: 49540
Poruke: 120
*.ptt.yu.

Jabber: eva01@jabber.3gnt.org


Profil

icon Re: max-ov koordinatni sistem i kamera13.04.2005. u 13:31 - pre 230 meseci
Citat:
eva 01: Izgleda da je to bilo u pitanju... Ustvari resio sam ovo malo pre tvog post-a ali tako sto sam rotaciju oko X ose dodao naknadno u matricu kamere .


Mala ispravka, rotacija oko X ose za 90 stepeni je prva view transformacija tj. bas kao sto je yooyo predlozio (zaboravio sam na inverziju redosleda mnozenja matrica za view transformaciju).
 
Odgovor na temu

[es] :: 3D programiranje :: max-ov koordinatni sistem i kamera

[ Pregleda: 4137 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

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