.[ ČeskéHry.cz ].
'Sklopeni' bitmapy do lichobezniku se zachovanim perspektivy

 
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
Yossarian



Založen: 28. 07. 2007
Příspěvky: 274
Bydliště: Šalingrad

PříspěvekZaslal: 20. říjen 2008, 19:06:39    Předmět: 'Sklopeni' bitmapy do lichobezniku se zachovanim perspektivy Odpovědět s citátem

Zdravim,
potreboval bych poradit s nasledujicim:

Mam bitmapu (obrazek), a chci ji sklopit defakto do lichobezniku, aby vypadala, jako by clovek koukal rovnobezne kolem ni..

Nazorne:

Sedive je dany obrazek (ctverec!), oranzove je zamysleny vysledek (uhlopricky jsou namalovany jen tak pro zjednodusseni), zelene vysrafovana je ubeznice, a modre oznaceny 2d rozmery toho co znam..
potreboval bych vzit bod [x,y] v originalnim ctverci, a ziskat bod [a,b] v lichobezniku, a vice versa.. bez perspektivni korekce (defakto linearne zmenseno) to vypada velice skarede

bile je uhlopricka, cervene je to, kde by mela byt.

Podarilo se mi vymyslet prepocet x->a, ale nijak jsem nevymyslel jakym zpusobem spocitat pomer vzdalenosti b->y.. Poradi nekdo? Diky.[/img]
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: 20. říjen 2008, 20:36:29    Předmět: Odpovědět s citátem

Bez homogenních souřadnic to asi nepůjde, ty potřebuješ právě pro tu perspektivu, jinak to vždycky bude vypadat divně. Samozřejmě existuje bijekce mezi oběma obrázky, ale v principu tam ztrácíš pixely, protože je jich v tom lichoběžníku méně. Z hlavy ti teď nedám přesnej návod, už je to celkem dávno, co jsem to řešil. Obecně: Mějmě 4 vertexy a k nim koordináty. Obecně jsem si ty koordináty zavedl ve tvaru (x,y,z,w), kde za x,y jsem dal souřadnice v rozsahu <0,1> (no spíš teda 0,0 pro jeden roh, 1,0 pro další atd), do z,w jsem dal 1, potom jsem x,z přenásobil jedním koeficientem a y,w druhým koeficientem (ty si nějak vymysli, pro různý čtyřúhelník budou jiné, ale uděláš tak prakticky projekci na libovolném čtyřúhelníku, i nekonvenčním). Poté si vybereš pixel a uděláš lineární interpolaci mezi koordináty všech 4 vrcholů podle vzdálenosti pixelu od všech vrcholů čtyřúhelníku (na to je takovej škaredej vzorec), tím získáš koordináty pro danej pixel. 2D koordináty na daném pixelu jsou (x/z, y/w) v rozsahu <0,1>. Toť vše, snad jsem na nic nezapomněl. Řešení je určitě víc, tohle je hodně 3DAPI-friendly. Wink DX9 efekt v RenderMonkey prezentující tento algoritmus jsem dal ke stažení tady: http://storm.unas.cz/13_non-linearmapping.rfx

Dalším řešením by bylo udělat prostorou perspektivní projekci, postup je podobný - tentokrát nemáš homogenní souřadnice pro jednotlivé složky koordinátů ale přímo pozice, kde pro každý pixel na konci dělíš lineárně interpolovanou pozici (x,y,z,w) hodnotou w.
_________________
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