Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 26. leden 2008, 16:26:18 Předmět: OGL přechody textur |
|
|
Zdravím... rád bych se zeptal jestli někdo neví, jak udělat stejný přechod textur na terénu, jako je vidět zde.
Nebo lépe řečeno, jestli to lze udělat bez použití shaderů...za pomocí nějakých Extensionů...
Předem díky za pomoc... _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 26. leden 2008, 19:43:51 Předmět: |
|
|
Zdravím, je to už trochu starej článek, ale je to jedna z možností. Třeba tě to nakopne nějakým směrem.
http://www.gamedev.net/columns/hardcore/geomorph/page2.asp
Je to odkaz na druhou stránku, kde se věnujou materiálům, ale jinak je ten článek celkově o geometrii. Dnes existují lepší způsoby, jak udělat terén, ale přechody textur můžeš udělat podobně.
A shadery doporučuju, budeš s tím mít mnohem míň práce a budeš příjemně překvapen, že to de uplně snadno. Nicméně nemusíš se do nich nutit. _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
Marek
Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 27. leden 2008, 03:01:49 Předmět: |
|
|
Mělo by to jít pomocí alphablendingu (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) nebo pokud to chceš mít rychlejší, tak pomocí multitexturingu a rozšíření GL_ARB_texture_env_combine (konkrétně GL_INTERPOLATE). Ovšem pomocí shaderů mi to připadá jednodušší... _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
|
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 27. leden 2008, 11:05:33 Předmět: |
|
|
Mě je to jasný, že je to pomocí shaderů snažší...jenže moje karta nepodporuje rozšíření GL_ARB_VERTEX_PROGRAM, GL_ARB_VERTEX_SHADER, GL_ARB_FRAGMENT_PROGRAM, GL_ARB_FRAGMENT_SHADER...
Na této stránce v příkladu 29 se používá starší rozšíření na vertex shader, ale potom ten shader musí být napsán v ASM. Nebo jestli se dá kód z GLSL skompilovat do ASM...
Mám v notebooku kartu GMA X3100 a ta poporuje jen OGL 1.5. _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
|
Ladis
Založen: 18. 09. 2007 Příspěvky: 1536 Bydliště: u Prahy
|
Zaslal: 27. leden 2008, 14:56:10 Předmět: |
|
|
Vsechny Intely pocinaje GMA 900 vcetne toho tvyho podporuji SM 2.0. I ty tam mas extenze GL_ARB_fragment_program a GL_ARB_vertex_program. Jedinym tvym omezenim je, ze na Intelech neni GLSL (high level shading language), ale jen assembly language, v kterym ale napises to samy. _________________ Award-winning game developer |
|
Návrat nahoru |
|
|
Marek
Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 27. leden 2008, 15:24:56 Předmět: |
|
|
Dal by se použít CG Toolkit 1.5, je to vyšší jazyk na shadery skoro stejný jak HLSL a umí to kompilovat do GL asm. Pro Intel karty nej řešení. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
|
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 29. leden 2008, 18:49:00 Předmět: |
|
|
To Eosie:
Stáhnul jsem ten CG Toolkit a konečně jsem to nastavil tak, aby se vertex nebo fragment shader překompilovaly do ASM (arbvp1, arbfp1)
No takže když bych dělal ty přechody pomocí fragment shaderu, jak bych to měl zhruba řešit. Nechci hotový kód, jen nějaké zjdenodušené schéma...v GLSL...
Mám knížku kde jsou takové ty základní věci o GLSL (samplary apod.) ale pořád nějak nevím jak na to...
Díky za rady...snad už brzo bude nějaký pořádný pokrok v mém projektu... _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
|
kerekes
Založen: 29. 07. 2007 Příspěvky: 57
|
Zaslal: 29. leden 2008, 20:56:29 Předmět: |
|
|
Zdar,
pouzi na mesh napriklad vertex coloring. Vertexy si oznacis povedzme na cierno a bielo (prechod).
Vo vertex shaderi si z farby vertexu (podla zlozky povedzme X vytvor 2 parametre ....jeden bude rovny x a druhy 1-x. Tie si posli do fragmentshadera, tam zaadresuj 2 textury trebarz zelena trava/hlina chodnik, vynasob farby parametrami a vysledok spocitaj.
To vytvori efekt prechodu medzi texturami. Mozes si tych textur miesat aj viac.....kde povedzme vysledok tejto operacie budes blendovat s tretou texturou podla Y farby vertexu a to potom zasa podla Z farby na stvrtu texturu a pod.
K tomu este samozrejme dalsi vypocet svetla apod. |
|
Návrat nahoru |
|
|
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 29. leden 2008, 21:34:42 Předmět: |
|
|
Ještě jeden malej dotázek...nesmějte se mi, já s shaderama nemám žádné zkušenosti ...no prostě když přibinduji vertex shader tak to nahrazuje fixní pipeline pro zpracování vertexů, ale pro fragmenty zůstavá ta fixní? Je to tak? Nebo se musí připojit jak vertex tak fragment shader? Kdyby to bylo to GLSL tak je to jasný...postup mám v knížce, ale jak to je u ASM, tak to fakt nevím... _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
|
Marek
Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 29. leden 2008, 21:36:03 Předmět: |
|
|
Tak jednak, CG toolkit není GLSL, je to jazyk CG, který má skoro stejnou syntax jako HLSL v DX (podle mě příjemnější než GLSL), takže se dají snadno přenášet shadery mezi oběma 3D API.
Budeš to řešit v podstatě stejně jako by se to dělalo přes GL_ARB_texture_env_combine. Nejdřív si zkus napsat vertex a fragment shader pro zobrazení normálního otexturovanýho modelu, ve vertex shaderu udeláš 2 věci:
- vynásobíš příchozí pozici modelview maticí, potom projection maticí a pošleš na výstup
- koordináty k textuře předáš na výstup
A ve fragment shaderu:
- nadeklaruješ si sampler (to je objekt, přes kterej čteš z textury)
- na vstupu ti dojdou koordináty, co právě přišly z vertex shaderu, ty dosadíš do tex2D společně se samplerem a dostaneš pixel z textury, kterou pošleš na výstup
Mohl bych ti klidně poslat odpovídající zdroják.
Teď k algoritmu - není nutno to nazývat "vertex coloring", prostě si uděláš pole floatu, ke každýmu vertexu jeden, kde si uložíš číslo mezi 0 a 1, které říká, ze které textury se bude samplovat (0.5 namíchá obě textury rovnoměrně) a necháš si to poslat do vertex shaderu do nějaké proměnné. Tam to z něj akorát pošleš na výstup, abys to dostal do fragment shaderu. Ve fragment shaderu načtes pixel z obou textur a na výstup pošleš výraz lerp(pixel1, pixel2, f), kde pixelN je pixel z textureN a f je ta tvoje proměnná z toho pole floatů.
I k tomuto bych ti mohl poslat zdroják. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
|
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 29. leden 2008, 21:39:12 Předmět: |
|
|
To Eosie:
Ne to jsi mě špatně pochopil, já neříkám, že to CGčko je GLSL...ale dá se přes ten kompilátor cgc zkompilovat kód napsán v GLSL do ASM...tak jsem to myslel... _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
|
Marek
Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 29. leden 2008, 21:41:11 Předmět: |
|
|
VODA napsal: |
Ještě jeden malej dotázek...nesmějte se mi, já s shaderama nemám žádné zkušenosti ...no prostě když přibinduji vertex shader tak to nahrazuje fixní pipeline pro zpracování vertexů, ale pro fragmenty zůstavá ta fixní? Je to tak? Nebo se musí připojit jak vertex tak fragment shader? Kdyby to bylo to GLSL tak je to jasný...postup mám v knížce, ale jak to je u ASM, tak to fakt nevím... |
Proto jsem to taky popsal polopatě. Prozatím neber v úvahu, že jde o asm shadery, používej CG API, ono se o vše postará. Ano kompletně to nahradí fixed function pipeline, ty budeš potřebovat oba typy shaderů (jindy by stačilo použít jen jeden, ale většinou to nemá moc velký smysl a používají se vždycky oba). Mrkni na CG User's Manual (součástí instalace), je to pěkný ebook popisující CG. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
|
Marek
Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 29. leden 2008, 21:44:10 Předmět: |
|
|
VODA napsal: |
To Eosie:
Ne to jsi mě špatně pochopil, já neříkám, že to CGčko je GLSL...ale dá se přes ten kompilátor cgc zkompilovat kód napsán v GLSL do ASM...tak jsem to myslel... |
Jo aha. Kvůli jednoduchosti bych doporučil používat CG přímo a tam nevím, jestli jde GLSL použít. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
|
JohnyDog
Založen: 17. 08. 2007 Příspěvky: 66
|
Zaslal: 29. leden 2008, 23:03:59 Předmět: |
|
|
Eosie napsal: |
Jo aha. Kvůli jednoduchosti bych doporučil používat CG přímo a tam nevím, jestli jde GLSL použít. |
Tak to je otazka co je jednodussi, sice ubyde potreba kompilace, ale zase je potreba se naucit zaklady Cg API a prilinkovat Cg k programu .. _________________
|
|
Návrat nahoru |
|
|
kerekes
Založen: 29. 07. 2007 Příspěvky: 57
|
Zaslal: 30. leden 2008, 00:27:54 Předmět: |
|
|
Eosie napsal: |
Teď k algoritmu - není nutno to nazývat "vertex coloring", prostě si uděláš pole floatu, ke každýmu vertexu jeden, kde si uložíš číslo mezi 0 a 1.... |
Ono sa s tym potom pomocou "vertex coloringu" ovela jednoduchsie naraba.
- vecsina modelovacich softov podporuje taky coloring pekne pomocou stetca kreslenim priamo na mesh. Na modeli terenu/whatever je to potom aj pekne vidiet, kde mam aku texturu (podla farby) a 3dsmax napriklad to vie pomocou vertexcolorov aj zobrazovat, tj grafik si moze tie textury skontrolovat aj bez enginu.
- da sa tolahko rozsirit o 3. (4) texturu bez vecsej upravy modelu... na hotovom modeli domalovat modrou tretiu texturu...
- vertexfarby sa daju lahko exportovat
- a ak na blend textur pouzijem napriklad r (x) zlozku tak mam k dispozicii zdarma este dalsie 3 zlozky (g,b,a), do ktorych mozem dat spustu zaujimavych veci ako napriklad "intenzitu ambientu", spekular (odrazivost) a podobne veci sluziace na fake, resp jemne doladenie vypoctu svetla pre rozne casti modelu (4xubyte vektor).
Pole floatov (float kazdemu vertexu) pre blend textur je fajn, len to by asi vyzadovalo vlastny editor, lebo taky "custom vertex atribut" asi nepodporuje kazdy editor . |
|
Návrat nahoru |
|
|
|