.[ ČeskéHry.cz ].
Kamera ?

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Buksy



Založen: 03. 01. 2009
Příspěvky: 19
Bydliště: KE

PříspěvekZaslal: 6. leden 2009, 20:34:13    Předmět: Kamera ? Odpovědět s citátem

Bry vecer Smile
polozim asi hlupu otazku pre vacsinu,ale riesim to cely den a som z toho uz totalne dopleteny Very Happy (asi to poznate,ked hladate nejaku chybu a dlho nad tym rozmyslate tak sa vam uz vsetko mily)

snazim sa spravit kameru ktoru by neoplyvnoval gimbal look,teda pomocou quaternionou,a potrebujem "trochu" pomoct Smile

snazil som sa sformulovat dlhy prispevok,ale som uz taky dopleteny Very Happy Very Happy, ze uz nad tym neviem ani rozmyslat,pokusim sa ho neskor pridat keby nebolo jasne o co mi ide,ale v skratke,

mam najprv natocit a posunut scenu podla toho kam sa pozera hrac a potom vykreslovat,alebo
najprv posunut a natocit scenu a potom vykreslit,
alebo vykreslit a nakoniec posunut a natocit scenu ?

tym tocenim myslim nasobenie opengl matice maticou z quaternionu

ja viem,asi to znie hlupo Very Happy

PS: este taka drobnost,ked nenasobim maticu maticou z quaternionu,ale pouzijem len glRotatef okolo Y osi (teda dolava a doprava), tak ked dam posun a potom rotaciu vzdy hned za glLoadIdentity tak mi to funguje spravne,ale ked uz tu rotaciu nahradim rotaciou pomocou quaternionou tak mi to nefunguje (ze by som mal zle vypocty alebo to robim uplne zle ? )
_________________
The Death is only beginning !
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 6. leden 2009, 22:02:46    Předmět: Odpovědět s citátem

Po Internetu už nějakou dobu koluje mýtus, že quaterniony vyřeší gimbal lock. Nevyřeší, ty na to ani nemají vliv. Quaterniony jsou dobré akorát v tom, že:
1) neobsahují scale, takže numerické nepřesnosti po jedné hodině výpočtu ti nezvětší objekt (to se u matic stává)
2) umí elegantním způsobem interpolovat mezi dvěma libovolnýma rotacema

Gimbal lock si děláš sám tím, jak ty rotace skládáš. Když ho nechceš, musíš na to úplně jinak. Především se vykašli na výpočet celé matice každý snímek (tzn. nevolat glLoadIdentity). Klíč je v tom, že si vždycky vezmeš matici kamery z minulého snímku a přinásobíš k tomu jen to, co se právě změnilo. A gimbal lock je pryč.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1824

PříspěvekZaslal: 6. leden 2009, 23:20:04    Předmět: Odpovědět s citátem

S tymi kvaternionami... Vsade na nete (aj na ultra-doveryhodnom-zdroji-vykypedyja) sa povaluje kopec kecov o tom, ze kvaterniony 'odstranuju' gimbal lock. Dokonca aj ja som to napisal do svojej bakalarky. Ono je to tak, ze ked nasobis navzajom dva kvaterniony, cize skladas dve rotacie, mozes to robit ako chces a nikdy nijaky gimbal lock nedostanes, ze Very Happy Ten nedostanes ale ani ked budes nasobit 2 rotacne matice...

Gimbal lock je problem hlavne u eulerovych uhlov a potom ho este mozes dostat, ked budu samotne rotacie (ci uz matica alebo kvaternion) 'napicu'. Co uz je ale tvoja chyba a nie chyba tvojej reprezentacie. Ale to chcel povedat asi aj Eosie a inak ma, zase, pravdu.

(inak sorry, ale zase sa mi podarilo napisat niekolko riadkov a nepovedat v podstate ani hovno Very Happy Very Happy)
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Buksy



Založen: 03. 01. 2009
Příspěvky: 19
Bydliště: KE

PříspěvekZaslal: 6. leden 2009, 23:36:43    Předmět: Odpovědět s citátem

pcmaster - neva,snaha sa ceni Laughing ,ci mam nasobit dve matice,alebo dve kvaterniony,je mne ako studentovy strednej skoly na ktorej som zatial nepreberal ani jedno uplne fuk Very Happy Very Happy ... asi skor quaterniony (momentalne je to pre mna vyzva,a ja sa nerad vzdavam Very Happy )

eosie - noo,keby som nemohol pouzivat glLoadIdentity,tak by sa mi celkovo vykreslovanie dost ztazilo,lebo ja tuto funkciu volam viackrat pocas vykreslovania
_________________
The Death is only beginning !
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1824

PříspěvekZaslal: 6. leden 2009, 23:43:06    Předmět: Odpovědět s citátem

Kludne volaj glLoadIdentity... To nie je problem. Eosie to asi myslel tak, aby si vzdy spocital 'diferencnu' (rozdielovu) maticu a tu prinasobil (glMultMatrix) k starej (ktoru si zapamatas) za staleho pouzitia glPush/PopMatrix - to ale budes pouzivat aj tak.

Este by nam mohol vysvetlit prakticky uzitok proti tomu, ked si vzdy spocitas celu aktualnu maticu Smile
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 7. leden 2009, 01:21:20    Předmět: Odpovědět s citátem

pcmaster to dobře vystihl (i to s tím, že je reprezentace nebo spíš postup konstrukce matice napiču). Ono totiž násobení čistě rotačních matic je ekvivalentní násobení příšlušných quaternionů. (tzn. to přebírá všechny dobré i špatné vlastnosti) Výpočet rozdílové matice je klíč (ale rozhodně to nedělat rozdílem matic, neboli maticí přechodu či pomocí jiných metod).

Např.:
- když se kurzor nepohne, nic nedělám
- když se kurzor pohne, uložím si vektor, o který se posunul právě tento snímek, a z tohoto vektoru spočítám rotační matici, kterou přínásobím k původní

Problém nastane právě s tou stabilitou, protože se ti po deseti minutách může stát, že objekt je o něco větší nebo menší (nesprávný scale). Smile A tady se ty quaterniony právě hodí, jejich velikost nemá žádný vliv na výslednou rotaci (a zároveň neobsahují ten scale).
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Buksy



Založen: 03. 01. 2009
Příspěvky: 19
Bydliště: KE

PříspěvekZaslal: 7. leden 2009, 01:53:32    Předmět: Odpovědět s citátem

hm,pripada mi to zlozite, je taka metoda rychlejsia ako "klasicka" s glLoadIdentity() Embarassed ?

hm,skusim opisat ako to ja chapem a opravte ma ked nieco napisem zle Smile, ten gimbal lock vlastne sposobuje to ze zavolam viacnasobne po sebe glRotatef(), teda sa mi presunu osi,napr

glRotatef(90.0, 0.0, 1.0, 0.0);
takze teraz sa vlastne Z a X osi prehodili?
no a ked za zavolam glRotatef,ale teraz na x-ovej osi
glRotatef(90.0, 1.0, 0.0, 0.0);
tak vlastne namiesto toho aby som sa otocil okolo x-ovej osi tak sa tocim okolo osi Z lebo sa prehodili,jo ?

takze namiesto toho pouzijem quaternion,ktory si vytvorim z tych rotacii a nakoniec vyslednym quaternionom vynasobim maticu

nedalo by sa to riesit tak,ze by som si spravil triedu,ktora by si pametala rotacie,a automaticky by mi menila osi? teda ak som sa prvy krat tocil okolo osi Y (cize Z a X sa mi prehodili), tak ak sa teraz tocim okolo X, tak by mi ju automaticky prehodilo na Z os ?

PS:nasiel som aj gimbal lock obrazok ale z nie je nejak jasne ktora os sa kam posunie,skor to vyzera ako keby sa Z os presunula na X-ovu a pritom X-ova sa nepohla, ten obrazok mi pripada nejaky vadny, ked ho tak sledujem pripada mi to ako keby sa ta os okolo ktorej sa ta kocka toci menila pocas pohybu
_________________
The Death is only beginning !
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 7. leden 2009, 02:27:48    Předmět: Odpovědět s citátem

Pro začátek zapomeň na quaterniony. Pokud ti to není jasné s maticema, nebude to jasné ani s ničím jiným.

Moje rada zní:
Nauč se lineární algebru.

Pochybuju, že bys pochopil vysokoškolská skripta (ani já bych to nedal v tvém věku), přesto si myslím, že se to dá zvládnout s nějakou povrchní znalostí analytické geometrie. Budeš muset pohledat nějaký tutoriály, kde je to vysvětleno tak nějak intuitivně. Začni s nehe.ceske-hry.cz, jsou tam nějaký články na matice a možná i něco navíc. Tvým cílem by měla být implementace vlastních funkcí na vektory a matice. Tak lépe pochopíš, co se tam děje. Potom tím úplně nahraď všechny funkce v OpenGL týkající se matic, tzn. funkce jako glLoadIdentity, glTranslatef, glRotatef, gluPerspective atd. nebudeš používat. Použiješ pouze glLoadMatrixf a do ní dáš to, co sis bokem spočítal sám. Případně ještě můžeš použít glMultMatrixf na přinásobení.

Co je to "klasická metoda s glLoadIdentity"? Ta funkce jenom nastaví aktuálně vybranou matici (modelview nebo projection) na identitu vzhledem k násobení matic.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Buksy



Založen: 03. 01. 2009
Příspěvky: 19
Bydliště: KE

PříspěvekZaslal: 7. leden 2009, 02:44:23    Předmět: Odpovědět s citátem

Very Happy to bolo naschval v uvodzovkach, ked si zoberes napr taku nehe 10 (pohyb po scene) tak tam tiez najprv vzdy zavola glLoadIdentity() a potom zrotuje podla x a y a presunie (glTranslatef()) .. to som mal na mysli Embarassed Very Happy

Very Happy noa este taky maly problem,ono teraz ma to dost stve ze mi to nefunguje Very Happy,a ja chcem aby to fungovalo Very Happy, takze potrebujem jednoznacnu odpoved pokial sa to tak neda,inak mam asi chybu vo vypoctoch (co akurat skumam Rolling Eyes )

PS: Very Happy ja viem,som nevdacny Very Happy
PS2: sorry za tych 1 000 000 smajlov,ale som zvyknuty trepat ich na zaciatok a koniec kazdej vety Very Happy
_________________
The Death is only beginning !
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 7. leden 2009, 03:19:05    Předmět: Odpovědět s citátem

Buksy> Myslím, že jsem ti poradil dostatečně a pomocí této diskuze bys měl být schopen svůj problém hladce vyřešit. Pokud nerozumíš mému výkladu, pak se obávám, že ti nemám jak pomoci.

pcmaster napsal:
kvaterniony 'odstranuju' gimbal lock. Dokonca aj ja som to napisal do svojej bakalarky.

Záleží, jaks to tam formuloval, nemusí to být nutně špatně. Pokud jsi napsal něco jako tohle, mělo by to být v pořádku: Rotace vyjádřená v Eulerových úhlech (pomocí příslušných matic) trpí ztrátou jednoho stupně volnosti (= gimbal lock), zatímco rotace vyjádřená pomocí rotační osy + úhlu (ekvivalentně quaternionu) tím netrpí.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Khaj



Založen: 16. 01. 2008
Příspěvky: 49

PříspěvekZaslal: 7. leden 2009, 09:39:11    Předmět: Odpovědět s citátem

Zdravím, zde se poprvé dozvídám o problému matic, což mě docela zarazilo.
Nestačilo by prostě čas od času normalizovat všechny tři vektory (sloupce matice)? Tím by se vyřešil scale problém .... gimbal lock, pokud to chápu dobře, znamená, že se vektory stanou k sobě ne-kolmé ... takže je občas znovu vektorově pronásobit (v matici, kde je chceme skutečně kolmé)?

Anebo je nejlepší jít cestou samostatného ukládání pozice,rotace,scale (+rotace každého vektoru pokud nechci ztratit funkcionalitu) a pak z nich vždy znovu sestrojit matici?

Jak se tenhle problém řeší normálně, bez quaternionů (nemají možnost nepravoúhlé soustavy a scalu, nemam je rád)?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1824

PříspěvekZaslal: 7. leden 2009, 09:42:06    Předmět: Odpovědět s citátem

Eo: Citoval som tam tento clanok, casti 3.4.1 a 3.5.1 a este zopar dalsich paperov.

Khaj: Ano, myslim, ze obcas (kazdy frame? Smile) zortogonalizovat ci znormalizovat tu rotacnu submaticu by malo teoreticky stacit, aby si sa vyhol numerickej nepresnosti a explozii. Mozno aj gimbal locku, ale nechce sa mi nad tym rozmyslat, prave som prisiel z odberu krvi, BLEEEE Mad Evil or Very Mad
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Buksy



Založen: 03. 01. 2009
Příspěvky: 19
Bydliště: KE

PříspěvekZaslal: 7. leden 2009, 12:11:54    Předmět: Odpovědět s citátem

eosie - jj napisal si toho dost dakujem Smile , akurat ze je to dlhsia cesta,mne sa zda ze kedysi mi to fungovalo aj tak ako to teraz robim,len mi to pripada ako keby som niekde mal nejaku chybu,chvilku sa s tym este pohram a ked na nic nepridem tak to spravim tak ako si mi radil Smile
_________________
The Death is only beginning !
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 7. leden 2009, 14:48:05    Předmět: Odpovědět s citátem

Khaj napsal:
gimbal lock, pokud to chápu dobře, znamená, že se vektory stanou k sobě ne-kolmé ... takže je občas znovu vektorově pronásobit (v matici, kde je chceme skutečně kolmé)?

Ne, gimbal lock je něco jinýho. To, co popisuješ, je ortogonalizace, což se dělá buď jak říkáš pronásobením vektorů pomocí vektorového součinu nebo pomocí Gram-Schmidtovy ortogonalizace (a jsou i jiné metody).

Gimbal lock je, když 2 osy splynou v jednu, tzn. rotace kolem jedné osy (např. X) je ekvivalentní rotaci podle druhé osy (např. Z), pak ztratíš stupeň volnosti. Př.: Mějme Eulerovy úhly (alpha, beta, gamma), kde beta = 90 stupňů. Potom pro libovolné úhly alpha,gamma platí, že otočení objektu (alpha, 90, gamma) = (alpha-gamma, 90, 0) = (0, 90, gamma-alpha), takže rotaci stačí popsat jen dvěma čísly (alpha-gamma, 90). Dokázat se to dá rozepsáním součinu třech matic rotací podle os X, Y a Z, dosazením beta = PI/2 a po úpravě to z toho vypadne.

Khaj napsal:
Anebo je nejlepší jít cestou samostatného ukládání pozice,rotace,scale (+rotace každého vektoru pokud nechci ztratit funkcionalitu) a pak z nich vždy znovu sestrojit matici?

Tohle s tím nemá mnoho společného. Ukládat si zvlášť pozici, rotaci, scale a zkosení a pak z toho všeho spočítat výslednou matici je docela populární přístup a v 3D grafice v ničem neomezuje. Dokonce bych i řekl, že je efektivnější (např. inverze, skládání transformací, volitelná změna libovolného z parametrů).

Khaj napsal:
Jak se tenhle problém řeší normálně, bez quaternionů (nemají možnost nepravoúhlé soustavy a scalu, nemam je rád)?

Viz výše. To, že něco neobsahují, ještě neznamená, že si to nemůžeš uložit bokem.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna