Matematické Fórum

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

#1 06. 01. 2015 14:55

unknow005
Příspěvky: 115
Škola: "Výběrová" Střední
Pozice: Programátor
Reputace:   
 

Projekce 2D bodu do 3D scény s kamerou

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ů:

Code:

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:

Code:

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:

Code:

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

 

#2 07. 01. 2015 07:10

unknow005
Příspěvky: 115
Škola: "Výběrová" Střední
Pozice: Programátor
Reputace:   
 

Re: Projekce 2D bodu do 3D scény s kamerou

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

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson