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: 25. srpen 2010, 22:43:00 Předmět: GLSL - 2D efekty, bump, shock, apod? |
|
|
Zdravím všechny spolubojovníky
včera jsem si začal poprvé "hrát" se shadery, protože jsem si naivně myslel že bych přes ně mohl přidat nějaké super 2d efekty do mé 2D hry, takže jsem zkouknul pár návodů, a implementoval si nějaké ty třídy pro práci se shadery, jako např. ShaderProgram, VertexShader a FragmentShader.
Problem je jednoduchý, našel jsem na netu ukázky různých efektů, jako např. shockwave, ripple, apod, ale nevím sakra jak je použit v mé hře (Jde mi o to jen implementovat jednoduché efekty, na shadery zapomenout, a nechat to pak uživatele ať si to upraví/přepíše. (práce až nad hlavu, takže si nemůžu dovolit se to začít učit do hloubky).)
Zatím umím jen shadery načíst, zkompilovat, připojit, slinkovat s programem a pak zavolat use. Taky umím nastavit a zjistit hodnotu uniform proměnných, ale to všechno mi je zatím prd platný.
Zajímalo by mě tedy, jak a kdy ty shadery použit. Tedy jestli by mi někdo mohl doplnit nějaké kroky v následujícím algoritmu:
citace: |
Inicializace:
-Načtu shadery, zkompiluju, atd.
-Použiju program, přes glUseProgramObjectARB
Renderovací smyčka:
-Renderuju textury přes quady
-SwapBuffers |
Zkoušel jsem třeba tento jednoduchý vertex shader:
citace: |
void main(void)
{
gl_Position = ftransform();
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_FrontColor = gl_Color;
} |
Vlastně to nic nedělá, ale funguje to, na rozdíl od toho shockwave efektu, kde vidím jen černou obrazovku.
Zde jsou shadery a ukázky pro ten shockwave efekt:
http://www.geeks3d.com/20091116/shader-library-2d-shockwave-post-processing-filter-glsl/
nebo
http://empire-defense.crystalin.fr/blog/2d_shock_wave_texture_with_shader
Třeba ten první příklad, má definované tyto uniformy:
citace: |
uniform sampler2D sceneTex; // 0
uniform vec2 center; // Mouse position
uniform float time; // effect elapsed time
uniform vec3 shockParams; // 10.0, 0.8, 0.1 |
Všechny umím nastavit, jen nevím význam té proměnné sceneTex, kde jí v mém kódu nastavit a jak použít.
Napadlo mě že to je textůra vytvořená z načteného frame bufferu, po dokončení renderování, ale jsem zelenáč, takže jen hádám.
Předem děkuji za případné odpovědi či odkazy.
Mějte se fajn.
PS: Málem bych zapomněl: myslíte že by přes shadery šly implementovat efekty jako např. 2D bump mapping? nebo pohyb 2D vody či 2D déšť?
Viz tyto linky:
http://www.flipcode.com/archives/The_Art_of_Demomaking-Issue_07_Bump_Mapping.shtml
http://sol.gfxile.net/gp/ch18.html
http://www.gaanza.com/blog/2d-rain-effect/ |
|
Návrat nahoru |
|
 |
]semo[

Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 26. srpen 2010, 08:03:00 Předmět: |
|
|
sceneTex bude s největší pravděpodobností texture, kde je obraz scény. Buď jí můžeš vytvořit zkopírováním framebufferu do textury, nebo lépe, rovnou do ní rendrovat. V OpenGL je na to několik technik, ale to je jiná pohádka. Tim, že tu texturu namapuješ na quad nějak zdeformovaně pak vytvoříš nějaký efekt.
Pohyb 2D vody, 2D déšť...na to všechno můžeš (a nemusíš) shadery použít. _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
 |
Crypton

Založen: 14. 05. 2009 Příspěvky: 306 Bydliště: The Void
|
Zaslal: 26. srpen 2010, 08:31:37 Předmět: |
|
|
Aha, super, hned to zkusím, díky moc
btw, tím renderováním přímo do textury myslíš přes glCopyTexImage2D a nebo vytvořením kontextu v bitmapě? (myslím tím "vlajku" PFD_DRAW_TO_BITMAP u struktury PIXELFORMATDESCRIPTOR) |
|
Návrat nahoru |
|
 |
Ladis

Založen: 18. 09. 2007 Příspěvky: 1537 Bydliště: u Prahy
|
|
Návrat nahoru |
|
 |
nou

Založen: 28. 07. 2007 Příspěvky: 1050
|
Zaslal: 26. srpen 2010, 09:13:46 Předmět: |
|
|
glCopyTexImage2D() je prvy sposob. druhy je vyuzitie P-buffer ktory je ale dnes uz zastaraly a nakoniec FBO co je priame renderovanie do textury.
odporucam ist cestou FBO kedze je to moderne a dobre podporovane rozsirenie.
http://www.songho.ca/opengl/gl_fbo.html _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
 |
pet
Založen: 11. 08. 2010 Příspěvky: 10
|
Zaslal: 26. srpen 2010, 09:35:00 Předmět: |
|
|
Sampler (ať už 2d, 3d či jiný) v podstatě určuje odkud a jak se bude načítat textura. Odkud říká z které texturovací jednotky a jak říká ta přípona. Typický kód tedy vypadá tak, že si zjistíš adresu sampleru v shaderu:
kód: |
g_sceneTex = glGetUniformLocation(program, "sceneTex");
|
Následně vybereš aktivní texturovací jednotku a připojíš texturu:
kód: |
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, sceneTexture);
|
A do shaderu pak pošleš číslo jednotky, kde se nachází ta správná textura:
kód: |
glUniform1i(g_sceneTex, 0);
|
V shaderu pak už přistupuješ přímo k textuře pomocí odpovídající funkce (tedy v případě sampler2D -> texture2D):
kód: |
fragColor = texture2D(sceneTex, texCoord); |
|
|
Návrat nahoru |
|
 |
Crypton

Založen: 14. 05. 2009 Příspěvky: 306 Bydliště: The Void
|
Zaslal: 26. srpen 2010, 11:09:00 Předmět: |
|
|
pet:
Tak už jsem to zprovoznil, díky moc za vysvětlení, moc mi to pomohlo. (Měl jsem problém v tom že jsem používal sampler2D a texture2D místo Rect verze, tedy sampler2DRect a texture2DRect.)
nou:
Vyřešil jsem to pomocí glCopyTexImage2D, ale kouknul jsem se na ty FBO, a určitě to taky zkusím, vypadá to že to nevyžaduje nějaké drastické změny, takže taky velice díky
------------------------
Ještě bych se chtěl zeptat, jestli neví někdo o nějaké kolekci či sbírce shaderů pro GLSL.
Já jsem našel docela dobrou sbírku ve Visualization Library:
http://www.visualizationlibrary.com/jetcms/node/4
Přímo odkaz na stažení, shadery jsou ve složce data/glsl/
http://www.visualizationlibrary.com/downloads/data-2009.08.804.tar.bz2
Dále pak jsou nějaké shadery zde:
http://www.geeks3d.com/category/geeks3d/shader-library-geeks3d/
http://www.facewound.com/tutorials/shader1/
http://igortrindade.wordpress.com/2010/04/23/fun-with-opengl-and-shaders/
Možná by někdo věděl i o jiných zdrojích?
PS: Další zdroje co jsem našel:
http://arunan.50webs.com/cs594final.html - Vytvoření bilboardu, včetně zdrojáků a obrázků.
http://opengl-doc.com/Sams-OpenGL.SuperBible.Third/0672326019/ch23lev1sec2.html - efekty, jako např. blur, sharpen, edge detect, apod.
http://machinesdontcare.wordpress.com/2008/03/12/supershape-2d-glsl-rewrite/ - Superformula 2D effect
http://www.curious-creature.org/2007/02/20/fast-image-processing-with-jogl/ - Bright pass filter, testováno, funkční.
http://www.foliativ.net/book/index.php?post/2006/07/10/118-fun-nor-not-with-shaders - bloom, glow, dynamic cube mapping a další, včetně zdrojáků a dema
http://www.swiftless.com/tag/glsl - docela hodně příkladů, včetně zdrojáků
http://www.quakeworld.nu/forum/viewtopic.php?id=3642 - toon shading (zdroják, až úplně dole)
http://myheroics.wordpress.com/2009/07/09/glsl-blinn-phong-gouraud-shader/ - Blinn Phong / Gouraud Shader
http://www.geeks3d.com/20100423/ruin-island-opengl-glsl-demo-with-full-source-code/ - motion blur, depth of field, parallax occlusion mapping, apod, včetně zdrojáků, video a dema
http://www.irrlicht3d.org/wiki/index.php?n=Main.Shaders - sbirka různý shaderů, glsl a hlsl
http://www.ozone3d.net/tutorials/image_filtering_p2.php - convolution kernels, jako např. gaussian blur apod. |
|
Návrat nahoru |
|
 |
|