Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Stránky: 1
Dobrý den,
potřeboval bych pomoci s jedním problémem ohledně "kroužení kamery okolo bodu v 3D prostoru", ale protože si myslím, že to bude více chyba v matematice než v programování, obracím se sem... Nevím, jestli to je víc otázka matematických výpočtů rotace nebo přepočtu grafiky ze 3D do 2D (řekl bych spíše to první):
Předem se omlouvám za trochu obsáhlý popis..
Má situace je následující.. když pohybuji kamerou nebo ji natáčím, tak vše funguje OK.. Potřeboval bych ale ještě funkci, kdy kamera krouží okolo bodu (o souřadnicích XYZ=0,0,0), tj. zatímco já nastavuji úhel, kamera (souřadnice XYZ=0,0,-32) se pohybuje po kružnici okolo bodu tak, aby se při daném úhlu vždy dívala na daný bod (tj. ten byl ve středu jejího pohledu, resp. po přepočtu na 2D měl vždy X,Y souřadnice 0).
Když rotuji jen podle jedné o z os (ať už X nebo Y), tak kamera krouží správně.. tj. z pohledu kamery rotuje vlastně ten polygon (např. pro úhel Y=90 má kamera souřadnici X=-32,Y=0,Z=0 a tím se stále dívá do 0,0,0). Jenže když chci rotovat podle obou úhlů současně, začne polygon kamsi ujíždět.
Veškeré další info je v obrázcích:
http://img200.imageshack.us/gal.php?g=rotacecam1.gif
Rotaci okolo bodu provádím tak, že nejprve odečtu souřadnice kamery od bodu, pak provedu rotaci, a pak je zpět přičtu.
Zkoušel jsem i vzoreček s opačným znaménkem:
_Z := Trunc(Z*Cos(urX)+Y*Sin(urX));
_Y := Trunc(Y*Cos(urX)-Z*Sin(urX));
_X := Trunc(X*Cos(urY)+_Z*Sin(urY));
Zv := Trunc(_Z*Cos(urY)-X*Sin(urY));
Xv := Trunc(_X*Cos(urZ)-_Y*Sin(urZ));
Yv := Trunc(_Y*Cos(urZ)+_X*Sin(urZ));
ale výsledek se lišil jen v tom znaménku a ne v prohozené souřadnici Xv a Yv. A je mi proti logice prohodit jen Xv a Yv na levé straně, protože pak to začne házet nesmysly např. pro rotaci okolo osy X jen po 90 stupních (vyjde mi X souřadnice <> 0 místo Y <> 0).
Pokud otočím polygon o 180 stupňů v ose X a pak začnu rotovat podle Y, tak polygon jede úplně na opačný směr, než by měl (mám dojem, že to souvisí s tím, že i když je kamera vlastně vzhůru nohama, stále např. v ose Y rotuje, jako kdyby nebyla, a přitom ale krouží v opačném směru)..
Doufám, že někdo odhalí případnou (snad trapně malou) chybičku a předem mu děkuji, že ji pro mne opraví.. nebo pokud je problém v něčem jako je "transformace natočení kamery do world space", vysvětlí.. (i když možná bude stačit jen vzoreček)
Martin Lux
Offline
↑ Elfman83:
Problém vyřešen.. Ručním nastavením jsem zjistil, že správně má být kamera pro dané úhly opravdu na X=22,Y=15,Z=-15. Když jsem s pomocí vzorců vypočítal nejprve jen úhel Y a pak teprve X, už mi vyšly správné souřadnice. Děkuji všem alespoň za pročtení :-)
Offline
Stránky: 1