.[ ČeskéHry.cz ].
Problém s rotací bodu okolo pozice kamery

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



Založen: 11. 12. 2012
Příspěvky: 32

PříspěvekZaslal: 11. prosinec 2012, 17:00:11    Předmět: Problém s rotací bodu okolo pozice kamery Odpovědět s citátem

Ahoj jsem tu nový a potřeboval bych poradit jak na rotaci bodu tak, aby ten bod se po otočení kamery nacházel jakoby pod myší. Prostě potřebuji znát polohu toho bodu jako vektor. Pokud použiji modelovou matici Opengl tak to jde, ale z toho nezískám ten vektor. Když jsem zkoušel rotovat vektorem tak se ten bod otáčel okolo nulove pozice a ne okolo kamery. Zkoušel jsem to i přes matice, ale asi je pořádně ještě nechápu, protože mně to dobře rotuje jen bud v ose x nebo y, ale v obou najednou ne. Prostě chtěl bych vytvořit něco jako testování přímkou mezi bodem kamery a tím rotujícím bodem.
Díky za pomoc s mojím problémem.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
TeaTime



Založen: 17. 06. 2011
Příspěvky: 264

PříspěvekZaslal: 14. prosinec 2012, 12:40:43    Předmět: Odpovědět s citátem

Jakou používáš konkrétně technologii? Odkud kam přesně chceš ten objekt dostat? Kolik toho víš o transformačních maticích?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Mivoj



Založen: 11. 12. 2012
Příspěvky: 32

PříspěvekZaslal: 14. prosinec 2012, 21:32:57    Předmět: Odpovědět s citátem

Ahoj díky za pomoc. No používám samozřejmě na posun a zjištování pozice vektory. Na rotaci matice 4x4 zatím no a moc to s nima neumím. Pak dále zkouším Quaterniony, ale ty chápu ještě mín. Dále používám klasické ještě transfomační matice opengl na vykreslení a pohyb. Tak jsem to tak nějak vyřešil. Sice to neni nejpřesnější ale funguje to, jinak pokud bys věděl o lepším řešení byl bych rád.

float mMatrix[16];
glGetFloatv(GL_MODELVIEW_MATRIX, mMatrix);
Vector3 rotujiciBod = pozKamery + vzdalenost * Vector3(-mMatrix[2],-mMatrix[6],-mMatrix[10]);
No měl jsem to sice k něčemu jínemu, ale kdybych věděl jak to funguje tak bych to použil dřív na mojem projektu jednoho simulátoru. Spíš to skládám a kopíruji z různých tutoriálu a zdrojáků než kdybych věděl jak to přesně funguje. Prostě to bastlím jak se dá.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1526
Bydliště: Telč

PříspěvekZaslal: 17. prosinec 2012, 09:53:15    Předmět: Odpovědět s citátem

Máš na mysli otáčení kamery okolo nějakého bodu (pod myší), přičemž kamera se dívá na ten bod ...neboli "orbit"?
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Mivoj



Založen: 11. 12. 2012
Příspěvky: 32

PříspěvekZaslal: 18. prosinec 2012, 11:29:17    Předmět: Odpovědět s citátem

No ano, prostě aby se ten bod nacházel uprostřed jak kurzor a reagoval na pohyb myši současně. Kurzor mám vyřešený a zobrazený přes glOrtho funkci. Takže pokud to nebylo pochopitelné z první zprávy tak se omlouvám.
Jinak jak jsem psal mám to tak nějak vyřešené, ale s tím že to trošku reaguje zpožděně a nevím jestli to můžu nějak líp upravit nebo mám něco blbě nastavené.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1526
Bydliště: Telč

PříspěvekZaslal: 18. prosinec 2012, 11:44:33    Předmět: Odpovědět s citátem

Tak takovýto orbit se skládá z několika fází:

- Nejdřív najdeš ten bod pod kurzorem:
1) čtení z depth bufferu (může se lišiš, tuším glReadPixels?)
2) přenesení bodu z window souřadnic do 3D, např. pomocí gluUnproject (nebo podobně přes vlastní maticovou matematiku)
nyní máš bod pod kurzorem, ale ve 3D souřadnicích (P)

- Pak rotuješ pozici kamery okolo toho bodu
1) vytvoříš vektor V od bodu P k pozici kamery (C): V = C - P
2) vektor V otočíš pomocí rotační matice: stačí vygooglit a celkem rychle najdeš, jak sám takovou matici vytvořit...
3) nastavíš novou pozici kamery C = P + V.

- následně je potřeba kameru zamířit znovu na bod P, třeba pomocí gluLookAt...
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Mivoj



Založen: 11. 12. 2012
Příspěvky: 32

PříspěvekZaslal: 18. prosinec 2012, 12:07:26    Předmět: Odpovědět s citátem

Diky za pomoc jak vidím tak to mám asi uplně jinak než by se to mělo dělat. Nad tím budu asi trávit trochu víc času než to uplně pochopím, ale jsem rád když mně někdo zkušenější vysvětlí postup.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1526
Bydliště: Telč

PříspěvekZaslal: 18. prosinec 2012, 12:10:47    Předmět: Odpovědět s citátem

Tak jak to máš ty, to může být vpohodě, ale asi to bude trochu nepřesné...No kdyžtak se ptej, od toho jsou diskuzní fóra.
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
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 -> 3D API / 3D Enginy Č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