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: 17. červen 2009, 15:16:42 Předmět: D3D - Simulace denního cyklu den-noc pro 2D hru ? |
|
|
Dobrý den.
Zkoušel jsem najít nějaké články o tomto tématu na gamedev.net ale nic takového jsem tam nenašel.
Chtěl bych přidat do své 2D hry denní cyklus, čily bych chtěl regulovat intenzitu denního světla podle času ve hře. (světla a stíny už mám)
Napadlo mě že se to dělá přes ambient světlo, ale nepodařilo se mi docílit požadovaného efektu. Sprajty renderuji pomocí texturovaných obdelníků...
Věděl by si někdo rady jak na to ?
Děkuji za případné odpovědi. |
|
Návrat nahoru |
|
 |
MD

Založen: 29. 07. 2007 Příspěvky: 437 Bydliště: Praha
|
Zaslal: 17. červen 2009, 16:57:45 Předmět: |
|
|
Tak jestli uz mas svetla a stiny, tak bys mel mit i Slunce (smerove svetlo v nekonecnu)? A pak staci regulovat jen toto jedno svetlo (intenzitu a smer)
A jak mas delany svetla ve 2D? Ja v Krkalovi pouzivam vyskove a normalove mapy, tudiz umim pro kazdy pixel spocitat korektni nasviceni. Stiny momentalne neumim. _________________ - play with objects - www.krkal.org - |
|
Návrat nahoru |
|
 |
Crypton

Založen: 14. 05. 2009 Příspěvky: 306 Bydliště: The Void
|
Zaslal: 17. červen 2009, 17:24:43 Předmět: |
|
|
MD napsal: |
Tak jestli uz mas svetla a stiny, tak bys mel mit i Slunce (smerove svetlo v nekonecnu)? A pak staci regulovat jen toto jedno svetlo (intenzitu a smer)
A jak mas delany svetla ve 2D? Ja v Krkalovi pouzivam vyskove a normalove mapy, tudiz umim pro kazdy pixel spocitat korektni nasviceni. Stiny momentalne neumim. |
No já ty světla mám opravdu jednoduché, je to jen textůra ve tvaru elipsy a renderuji to textůru světla s "additive blending mode".
Stíny řeším tak že mám textůru stínu v každém směru, pak jen zjištuji jestli je ten objekt v dosahu světla, pokud ano tak renderuji tu textůru stínu v požadovaném směru.
Zkoušel jsem to denní světlo nastavovat přes D3DRS_AMBIENT, nastavit nějaký globální materiál a renderovat všechny objekty, jenže takhle je každý ten objekt ve stejné barvě jako ta barva toho ambient světla. |
|
Návrat nahoru |
|
 |
Houp
Založen: 28. 07. 2007 Příspěvky: 672
|
Zaslal: 17. červen 2009, 17:30:05 Předmět: |
|
|
Není to možná nejrychlejší a nejefektivnější způsob, ale co přes celou plochu překreslovat částečně průhledný obdélník. Průhlednost dle denní doby? _________________
 |
|
Návrat nahoru |
|
 |
Vilem Otte

Založen: 18. 09. 2007 Příspěvky: 462 Bydliště: Znojmo - Sedlesovice, Kravi Hora
|
Zaslal: 17. červen 2009, 17:35:17 Předmět: |
|
|
A případně bych doporučil spočíst si jeho barvu a intenzitu podobně jak se to dělá při počítání atmospheric scatteringu (Rayleigh scattering je na oblohu, Mie scattering + Henyey/Greenstein by ti měly dát správnou barvu slunce ... jenom na tu barvu to jde ale samozřejmě zkrátit, tak abys spočetl přímo ji), jako vedlejší produkt dostaneš intenzitu (což se hodí!). _________________ Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration. |
|
Návrat nahoru |
|
 |
quas4
Založen: 18. 10. 2007 Příspěvky: 199
|
Zaslal: 17. červen 2009, 17:46:47 Předmět: |
|
|
Houp napsal: |
Není to možná nejrychlejší a nejefektivnější způsob, ale co přes celou plochu překreslovat částečně průhledný obdélník. Průhlednost dle denní doby? |
ano, presne timto smerem bych se v tvem pripade taky vydal s tim ze treba svetla muzes kreslit az po vykresleni tohoto full screen quadu (v noci by mely vice osvetlovat..). Pokud muzes pouzivat shadery tak se v post process fazi da s barvami v texture udelat skoro cokoliv. |
|
Návrat nahoru |
|
 |
Crypton

Založen: 14. 05. 2009 Příspěvky: 306 Bydliště: The Void
|
Zaslal: 17. červen 2009, 19:27:12 Předmět: |
|
|
Děkuji za odpovědi
Zkusil jsem ten trik s obdelníkem přes celou obrazovku, nejprve jsem vykreslil terén, pak objekty, pak ten obdelník a nakonec světla.
Problém je v tom že když zvyšuji alfa kanál toho obdelníku, tedy chci aby byla více tma, tak se zároven snižuje i intenzita světel, přitom by měla být stejná protože ty světla vykresluji až po vykreslení toho obdelníku.
Tu barvu toho obdelníku jsem nastavil na ARGB(255, 0, 0, 0), tedy jsem chtěl aby byla úplná tma a světla svítila, jenže ty taky nejdou vůbec vidět.
Napadlo mě že musím taky upravit funkci pro vykreslování světel, hlavně pak alpha blending, no tak jsem si s tím zkusil pohrát a nakonec jsem nic nevymyslel...
Blending nastavuji pro vykreslování světel takto:
SetRenderState(D3DRS_SRCBLEND, D3DBLEND_DESTCOLOR);
SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);
Taky nastavuji TextureStageState na:
SetTextureStageState(0,D3DTSS_COLOROP, D3DTOP_MODULATE2X);
SetTextureStageState(0,D3DTSS_COLORARG1, D3DTA_TEXTURE);
SetTextureStageState(0,D3DTSS_COLORARG2, D3DTA_DIFFUSE);
 |
|
Návrat nahoru |
|
 |
|