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
Dobrý den,
mohl by mi někdo prosím poradit s malým problémem ohledně projekce 2D bodů do 3D scény?
Příklad:
Mám 4 body v 2D rovině a kameru. Každý bod reprezentuje hranu zdi. Při pohybu s kamerou vždy přepočítám všechny body podle následujících vzorců:
Transformace_X = Absolutni_poloha_zdi_X - Poloha_kamery_X Transformace_Z = Absolutni_poloha_zdi_Z - Poloha_kamery_Z temp_X = Transformace_X (uložím si tuto proměnnou pro další počítání abych si ji nepřepsal) Transformace_X = temp_X * cos(Kamery_uhel_rotace_stupne) + Transformace_Z * -sin(Kamery_uhel_rotace_stupne) Transformace_Z = temp_X * sin(Kamery_uhel_rotace_stupne) + Transformace_Z * cos(Kamery_uhel_rotace_stupne)
Nyní máme u každého bodu "skutečné" souřadnice vůči poloze kamery (Transformace_X a Transformace_Z). Nyní si přepočítám každý bod zdi vůči 2D projekci kamery. Proměnná Pozice_X značí kde mi začíná zeď z leva:
Pozice_X = Střed_obrazovky_v_ose_X + Transformace_X * (Hloubka_projekce / Transformace_Z) * (Vyska_projekce / Sirka_projekce)
Pozici Y nemusíme počítat jelikož jsou všechny zdi ve středu projekce kamery. Velikost zdi pak počítám podle vzdálenosti bodu od kamery:
Meritko_velikosti_zdi = Hloubka_projekce / Transformace_Z
---
Problém je, když se bod zdi dostane vůči kameře mimo "ideální" pozici - jakoby "za kameru". Vzoreček pak vyhodí jinou hodnotu a dojde k chybě (vypočítaný bod zdi není tam kde by měl být).
Poradí mi někdo?
Pro jednodušší představu je zde na odkazu níže ukázka v HTML5 (je třeba mít aktuální prohlížeč). Pohyb je realizovaný pomocí klávesnice (viz. text na obrazovce). Zobrazuji souřadnice kamery a úhel natočení. Červená šipka značí kameru a její směr. Modré tečky reprezentují hrany zdi které při projekci spojuji a vznikne tak 3D projekce. Přidal jsem i pomůcku pro výpočet - kliž kliknete na jeden bod zdi, tak se zobrazí jeho vypočítané souřadnice. Když budete jednotlivé body míjet, jakmile se nějaký bod dostane za hráče, změní se hodnota Pozice X (úplně se otočí v souřadnicích) a zeď se nakreslí špatně...
Ukázka zde: http://www.spamweb001.wz.cz/test/
(ukázka je dočasně)
Nějaká rada?
Díky.
UK
Offline
Nikdo nic? :( ... nevím zda-li jsem se správně vyjádřil. Při výpočtu proměnných Transformace_X a Transformace_Z se používají goniometrické funkce. Když je šipka (kamera) jako střed kružnice, tak by se měli vzorečky upravit podle toho v jakém kvadrantu (oné kružnice) se nachází bod zdi. I. a II. kvadrant se "zdá" v pořádku, ale jakmile je bod zdi ve III. nebo IV. kvadrantu, dojde ke špatnému výsledku.
Nějaký nápad?
Díky,
UK
Offline