Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
BX
Založen: 19. 12. 2010 Příspěvky: 5
|
Zaslal: 16. únor 2011, 09:49:55 Předmět: Vykreslovanie grafiky, v pixeloch a v "nepixeloch" |
|
|
Zdravím vás
Mám takú skôr teoretickú otázku. Totiž, keď pracujem napríklad v Allegro, tak používam na vykreslovanie suradnice v pixeloch. To znamená, že som obmedzený na akúsi "mriežku" do ktorej kreslím. Pohyb po diagonále by som potom spravil (x+1,y+1). To by ale bol pohyb v uhle 45 stupňov. Ak by som chcel menší/väčší uhol, musel by som to riešiť (x+1,y+2) to už ale vyzerá kostrbato a neplynule.
Naproti tomu v iných, modernejších knižniciach (ako príklad uvediem cocos2D) využívam akési imaginárne "nepixely", kde sú x a y súradnice už typu float. Môžem teda urobiť (x+0.1,y+0.2) a pohyb teda v týchto destiných číslach vyzerá prirodzenejšie.
No a teda moja otázka znie, ako je možné niečo také docieliť? Teda pýtam sa na teóriu, techniku, aká sa na to používa. Alebo teda môžete mi ozrejmiť túto problematiku? Odkázať ma na nejaké články apod.
Ďakujem za odpovede. |
|
Návrat nahoru |
|
 |
zgerbiak

Založen: 22. 09. 2007 Příspěvky: 39
|
Zaslal: 16. únor 2011, 10:17:05 Předmět: |
|
|
Jednoducho.
Súradnice budú float, ale pre vykreslenie použiješ tie súradnice pretypované na integer.
Bude tam síce rozdiel v skutočnej pozícii a vykreslenej pozícii, ale ten rozdiel je zanedbateľný(max 1px). |
|
Návrat nahoru |
|
 |
Houp
Založen: 28. 07. 2007 Příspěvky: 672
|
Zaslal: 16. únor 2011, 10:48:03 Předmět: |
|
|
jak říká "prasátko", i v Allegro bys měl použít float, ale před vykreslením přetypovat na int. _________________
 |
|
Návrat nahoru |
|
 |
Ladis

Založen: 18. 09. 2007 Příspěvky: 1537 Bydliště: u Prahy
|
Zaslal: 16. únor 2011, 14:27:36 Předmět: |
|
|
Přetypování zaokrouhlí dolů, je více typů zaokrouhlení, ale zde bych upřednostnil rychlost a použil to přetypování. Pak ještě když se budeš chtít pohybovat v libovolném úhlu, tak použiješ znalost jednotkové kružnice, tj. změna_x = cos úhel, změna_y = sin úhel. To je pro jednotkovou kružnici se středem v původní pozici objektu, takže dává hodnoty -1..1, tudíž ještě případně vynásobit délkou pohybu. Délka je třeba zadaná rychlost (např. 50 pixelů za sekundu) krát časový rozdíl mezi snímky hry. Musíš ale furt počítat pohyb s interními float hodnotami, jinak to bude zaokrouhlovat i v pohybu. A pokud chceš mít ve hře vícero rozlišení, tak pracuj ve virtuálním rozlišení uvnitř hry (např. 800x600) a až při vykreslení vynásob koeficientem do skutečného rozlišení a pak převeď na int (taktéž se dá pořešit různý poměr stran u displejů, ale to sem teď nebudu zatahovat). _________________ Award-winning game developer |
|
Návrat nahoru |
|
 |
Al
Založen: 23. 10. 2007 Příspěvky: 196
|
Zaslal: 17. únor 2011, 22:53:45 Předmět: |
|
|
No některé frameworky (štítím se použít slovo knižnice ) to ve floatu i kreslí. (Použije to interpolaci.) A je jich myslím už dnes docela dost, považuju to dávno za standard.
Nicméně teda když zůstaneme u prehistorické představy, že kreslit se dá jen na celočíselné souřadnice, pak Houpova odpověď je vševystihující. |
|
Návrat nahoru |
|
 |
Houp
Založen: 28. 07. 2007 Příspěvky: 672
|
Zaslal: 17. únor 2011, 23:22:32 Předmět: |
|
|
Chápu to dobře, že když dám vykreslit pixel na bílé pozdí [0, 0.5] s barvou 0,0,0, tak budou na obrazovce pixely [0, 0] a [0, 1] s barvou 128, 128, 128? (případně s jinou barvou?)
Nejsem si jist, jestli tohle je žádoucí výsledek např. u pixel art grafiky. _________________
 |
|
Návrat nahoru |
|
 |
micky

Založen: 28. 02. 2008 Příspěvky: 348 Bydliště: Plzeň, Praha
|
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 18. únor 2011, 08:53:56 Předmět: |
|
|
Houp napsal: |
Chápu to dobře, že když dám vykreslit pixel na bílé pozdí [0, 0.5] s barvou 0,0,0, tak budou na obrazovce pixely [0, 0] a [0, 1] s barvou 128, 128, 128? (případně s jinou barvou?) |
Zas tak jednoduchý to není. Rasterizace bodu ovlivňuje víc pixelů okolo, aby se dosáhlo požadovaného efektu. A barva 128,128,128 je přecejen trochu tmavá, v praxi se používá světlejší. Oko vždy vnímá průměrnou barvu v nějakém okolí, nikoliv přesnou barvu pixelu. Dají se taky využít sub-pixel souřadnice pro LCD monitory (vyhlazují se tak třeba fonty), tzn. ve skutečnosti máš v ose X na LCD monitorech 3x větší rozlišení v odstínech šedi. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 18. únor 2011, 10:40:38 Předmět: |
|
|
Houp napsal: |
Chápu to dobře, že když dám vykreslit pixel na bílé pozdí [0, 0.5] s barvou 0,0,0, tak budou na obrazovce pixely [0, 0] a [0, 1] s barvou 128, 128, 128? (případně s jinou barvou?) |
Abych to upřesnil a uvedl příklad, tak pixel na souřadnicích [0, 0.5] se skládá z dvou pixelů, které mohou mít následující barvu:
(R,G,B)(R,G,B) = (0, 128, 255)(255, 128, 0)
To je LCD sub-pixel pozicování. Hodnoty barev by se (myslím) měly ještě převést do sRGB a až pak zobrazit na monitor. Finta je v tom, že na LCD se za sebou střídají pruhy od každé barvy a mají pořadí přesně RGBRGB.... a je jedno, jestli pixel umístíš na (RGB)RGB, nebo na R(GBR)GB, nebo na RG(BRG)B. Pro oko v tom není rozdíl, pokud každá barva má stejnou intenzitu.
Pro ilustraci, to vpravo je LCD:
http://upload.wikimedia.org/wikipedia/commons/c/cb/XO_screen_01_Pengo.jpg _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
Ladis

Založen: 18. 09. 2007 Příspěvky: 1537 Bydliště: u Prahy
|
Zaslal: 18. únor 2011, 11:16:15 Předmět: |
|
|
LCD nemají vždy pořadí subpixelů RGB. Otoč si lepší desktopový LCD na výšku a máš Vertical-RGB (otáčení je i na PDA) nebo když výrobce v mobilu dá displej otočeně, tak máš BGR. V některých operačních systémech se dá proto pro vyhlazení písmen vybrat. _________________ Award-winning game developer |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 18. únor 2011, 11:25:40 Předmět: |
|
|
Jo, ale já se bavím o běžným LCD na PC, které si během hry neotáčíš, a kde je zaběhnutý určitý standard. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
Ladis

Založen: 18. 09. 2007 Příspěvky: 1537 Bydliště: u Prahy
|
Zaslal: 18. únor 2011, 11:57:17 Předmět: |
|
|
Dobře, pro hraní her by se dalo předpokládat RGB, ale pro aplikace obecně by to chtělo počítat s otočením monitoru (přeci jen se tam dokument mnohem lépe vejde). _________________ Award-winning game developer
Naposledy upravil Ladis dne 18. únor 2011, 17:01:46, celkově upraveno 1 krát |
|
Návrat nahoru |
|
 |
Jack M.A.X.
Založen: 28. 07. 2007 Příspěvky: 60
|
Zaslal: 18. únor 2011, 16:13:48 Předmět: |
|
|
Heh a já jsem žil doteď v domnění že pixel je prostě pixel(bod) a že žádnej půl bod ani nejde udělat  |
|
Návrat nahoru |
|
 |
ICB
Založen: 14. 09. 2009 Příspěvky: 8
|
Zaslal: 18. únor 2011, 20:15:38 Předmět: |
|
|
Samozřejmě že se žádný půl-bod nejde udělat. Pixel buď existuje, nebo ne, subpixel je část informace o pixelu. Dřív se tomu říkala paleta barev. Zkus použít rotace objektu (cos,sin). Vlastně to co radil Ladis. |
|
Návrat nahoru |
|
 |
Mem

Založen: 28. 07. 2007 Příspěvky: 1959 Bydliště: Olomouc
|
Zaslal: 19. únor 2011, 14:24:03 Předmět: |
|
|
Ladis: A u otočení RGB displeje to nekončí, viz dále. Každopádně aspoň u ClearType to myslím řeší systém sám spolu s informací o rotaci displeje (když mám jeden monitor otočený a druhý normálně, tak písmo je vyhlazené na obou)
ICB: Subpixel nemusí být část informace jen o jednom pixelu. Existují totiž ještě displeje, které nemají mřížku identických bodů jako RGB, ale používají jiná uspořádání/vzory. Příkladem budiž AMOLED displeje a uspořádání pentile. Tam má jeden "pixel" jen dva subpixely, a to buď zelený a červený, nebo zelený a modrý. Navíc ty subpixely jsou různě veliké V důsledku tak obraz tvoří kombinace více subpixelů aniž by se dalo říct, že něco konkrétního je pixel odpovídající zdrojovému obrazu Zobrazit na takovém displeji standardní pravidelný 2D obraz je potom podstatně náročnější, a samozřejmě to zahazuje grafické optimalizace zaměřené na subpixely RGB.
 |
|
Návrat nahoru |
|
 |
|