Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Crypton

Založen: 14. 05. 2009 Příspěvky: 306 Bydliště: The Void
|
Zaslal: 18. květen 2009, 15:17:45 Předmět: D3D - Rozmazané textůry při změně projekce |
|
|
Zdravím ve spolek,
Jak ted kutím tu 2D hru, tak jsem chtěl přidat funkci zoomovaní, a taky se mi nakonec povedlo změnou matice projekce.
Problém je v tom že když tu textůru přiblížím tak je dost pixelizovaná, vypadá jako vyříznutá z okna dosu
Napadlo mě že to vyřeším tím že omezím rozsahu toho zoomu, stalo se, a výsledek je lepší, už to není tak kostičkované
Takže mě napadlo použít nějaký filtr:
kód: |
SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_ANISOTROPIC);
SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_ANISOTROPIC); |
Výsledek vypadá opravdu dobře, jen mám problém s tím že ty textůry k sobě přestanou přiléhat když přiblížím projekci, tedy vidím rámeček kolem té textůry v barvě pozadí, a k tomu se ty texůry rozmažou.
Ty textůry vykresluji pomocí texturovaných obdelníků a odečítám hodnotu 0.5 od pozice každého vertexu.
Normálně s tím problém nemám, jen když zazoomuji.
Věděl by někde kde by mohla být chyba ? Může být problém v textůrách ? Děkuji za případné odpovědi... |
|
Návrat nahoru |
|
 |
Ladis

Založen: 18. 09. 2007 Příspěvky: 1537 Bydliště: u Prahy
|
Zaslal: 18. květen 2009, 15:50:01 Předmět: |
|
|
Zkus poslat obrazek, at vidime, o co jde. _________________ Award-winning game developer |
|
Návrat nahoru |
|
 |
Crypton

Založen: 14. 05. 2009 Příspěvky: 306 Bydliště: The Void
|
Zaslal: 18. květen 2009, 16:04:10 Předmět: |
|
|
Ted jsem zjistil že když típnu screenshot přímo z dx a né pomocí PrintScreen tak ta chyba jde vidět úplně....
Naposledy upravil Crypton dne 19. květen 2009, 01:09:04, celkově upraveno 1 krát |
|
Návrat nahoru |
|
 |
ladik-BigBoss

Založen: 28. 07. 2007 Příspěvky: 162
|
Zaslal: 18. květen 2009, 19:19:37 Předmět: |
|
|
v OpenGL by pomohlo asi nastavit clamp, tak zkus neco podobneho v DX. taky mozna pomuze nedavat koordinaty textur uplne do kraje, ale trochu nechat mezeru. anizotropni filtr bere pro urceni pixelu mnozinu texelu a asi bere mimo texturu i nejaky jednobarevny ramecek... |
|
Návrat nahoru |
|
 |
Khaj

Založen: 16. 01. 2008 Příspěvky: 49
|
Zaslal: 18. květen 2009, 19:22:27 Předmět: |
|
|
Pri zoomu nad pomer 1:1 (velikost okna:velikost textury) se samozrejme zacnou dopocitavat pixely mezi pruhlednejma a nepruhlednejma (na polopruhledny) a ty se pak zakonite zobrazi.
...
reseni: alfa test (cokoli polopruhlednyho odsmiknout) Pokud ale chces i pruhlednost, tak nevim.
Tyjo nevite nekdo, jak by se to resilo (bez ohavnyho pixlovaciho zvetsovaciho filtru), kdyz bych chtel vsechny stupne pruhlednosti a zaroven ostrost pri zoomu? |
|
Návrat nahoru |
|
 |
Crypton

Založen: 14. 05. 2009 Příspěvky: 306 Bydliště: The Void
|
Zaslal: 18. květen 2009, 19:57:50 Předmět: |
|
|
Já tam právě žádné mezi stupně průhlednosti nemám, bud je pixel úplně průhledný (0x00FFFFFF) a nebo je plně viditelný (0xFFFFFFFF).
Jinak jsem vyzkoušel všechny filtry, ani jeden tu chybu neodstanil, kromě toho D3DTEXF_POINT který je vlastně nastavený defaultně.
Jestli myslíš "Clamp Texture Address Mode", tak jsem to našel ale nevím jak to použít a zda to vůbec pomůže
http://msdn.microsoft.com/en-us/library/bb204826(VS.85).aspx |
|
Návrat nahoru |
|
 |
quas4
Založen: 18. 10. 2007 Příspěvky: 199
|
Zaslal: 18. květen 2009, 23:10:48 Předmět: |
|
|
Khaj napsal: |
Pri zoomu nad pomer 1:1 (velikost okna:velikost textury) se samozrejme zacnou dopocitavat pixely mezi pruhlednejma a nepruhlednejma (na polopruhledny) a ty se pak zakonite zobrazi.
...
reseni: alfa test (cokoli polopruhlednyho odsmiknout) Pokud ale chces i pruhlednost, tak nevim.
Tyjo nevite nekdo, jak by se to resilo (bez ohavnyho pixlovaciho zvetsovaciho filtru), kdyz bych chtel vsechny stupne pruhlednosti a zaroven ostrost pri zoomu? |
zkus si precist tohle: http://www.valvesoftware.com/publications/2007/SIGGRAPH2007_AlphaTestedMagnification.pdf |
|
Návrat nahoru |
|
 |
Crypton

Založen: 14. 05. 2009 Příspěvky: 306 Bydliště: The Void
|
Zaslal: 19. květen 2009, 11:31:05 Předmět: |
|
|
Opravdu by někdo nevěděl co s tím ?
Vypadá to totiž že tam totiž nějaké pixely chybí, myslím si že když se ta textůra prožene tím zvětšovacím filtrem (D3DSAMP_MAGFILTER) tak se na hranách kde je rozdíl alfa kanálu 255 (alfa jednoho pixelu je 0 a druhý pixel má 255), se udělá průměr, takže se tam nastaví alfa kanál na 128.
Protože používám jen dva stavy průhledností (0 a 255, nic mezi) tak jsem vypnul ten alfa test (D3DRS_ALPHATESTENABLE), no tak jsem ho zkusil ted zapnout a nastavil jsem tam aby se všechny pixely která mají nějakou alfu tak aby se smazaly, no a výsledek je stejný nic se nezměnilo.
Takže alfa testem se to nevyřeší.... |
|
Návrat nahoru |
|
 |
johnnash
Založen: 30. 07. 2007 Příspěvky: 80
|
Zaslal: 19. květen 2009, 12:01:59 Předmět: |
|
|
Nemas nahodou vic textur v jedne velke? Pokud jo tak kazdy texturovaci koordinat zvetsi/zmensi o nejaky maly cislo(idealne si to prepocti aby to byl zhruba jeden pixel). Proste namapujes texturu o jeden pixel posunutou od okraju. Pripadne muzes zkusit zvetsit posunuti v zavislosti na filtru. |
|
Návrat nahoru |
|
 |
Crypton

Založen: 14. 05. 2009 Příspěvky: 306 Bydliště: The Void
|
Zaslal: 19. květen 2009, 12:30:32 Předmět: |
|
|
Právě že ten texture atlas nepoužívám, každá ta textůra je samostatná, nejsou v ní žádné další textůry.
No a jinak jsem zkoušel hýbat s tou textůrou, normálně jsem odečítal 0.5 od pozice každého vertexu, a zkoušel jsem z jiný hodnoty, zvětšit ten vertex apod. Ale nic nepomohlo....
Když jsem se kouknul ale na ten screenshot pořádně, všimnul jsem si že všechny textůry mají problém právě s tou průhledností, a to na přechodu 0-255, zkusím tam upravit nějakou textůru a udělat tam přechod né 0-255 ale 128-255... no a s tím rozmazáním nevím, kde by mohl být problém. |
|
Návrat nahoru |
|
 |
|