.[ ČeskéHry.cz ].
[OPENGL + GLSL] Rendering do 3D textury

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
mafian89



Založen: 21. 10. 2012
Příspěvky: 51

PříspěvekZaslal: 2. březen 2015, 19:59:50    Předmět: [OPENGL + GLSL] Rendering do 3D textury Odpovědět s citátem

Zdravím,

snažím se naimplementovat metodu Light Propagation Volumes, ale zasekl jsem se už na začátku. Je potřeba scénu rozřezat uniformní mřížkou (např. na 32x32x32 buňek). Velikost buňky mám spočítanou (z bounding boxu). A teďka ji potřebuji naplnit (z Reflective Shadow Mapy). Tady je kámen úrazu. Pořádně nevím, jak to udělat. První myšlenka byla vytvořit si 3D texturu reprezentující mřížku a nastavit ji jako render target (za použití FBO). Jenže to vypadá, že to v OpenGL nějak nejde (nebo jsem zatím nedošel na způsob, jak to udělat). Tak bych se chtěl zeptat, zda je možné nabindovat 3D texturu do FBO jako např. Color attachment? Nebo musím jít jinou cestou?

Díky za každý názor Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



Založen: 28. 07. 2007
Příspěvky: 1047

PříspěvekZaslal: 2. březen 2015, 20:57:39    Předmět: Odpovědět s citátem

ale samozrejme ze to ide. glFramebufferTexture3D() ma parameter layer ktory urcuje do ktorej vrstvy sa bude rendrovat. renderujes teda po jednotlivych vrstvach.

http://www.opengl.org/sdk/docs/man4/html/glFramebufferTexture.xhtml
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mafian89



Založen: 21. 10. 2012
Příspěvky: 51

PříspěvekZaslal: 2. březen 2015, 21:17:45    Předmět: Odpovědět s citátem

Díky, o tom vím. Jen mi přijde trochu plýtvání časem, když budu mít 32 vrstev, tak dělat 32 průchodů, navíc potřebuji pro každý kanál jednu 3d texturu a ještě nějaké další - takže by ten počet cyklů rostl docela rychle. Tak jsem doufal, že bude možné nějak nabindovat texturu jako celek a adresovat v shaderech. Asi budu muset přejít na jiný postup.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



Založen: 28. 07. 2007
Příspěvky: 1047

PříspěvekZaslal: 2. březen 2015, 21:53:18    Předmět: Odpovědět s citátem

alternativa ktora ma napada je renderovat to do dlazdic. alebo este sa da pouzit MRT aj ked tu nie som si isty ci to nebude spadat do undefined behavior ak pouzijes jednu 3D texturu ako jednotlive vrstvy. ale aj tak tam bude tak 6-8 vrstiev naraz.
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mafian89



Založen: 21. 10. 2012
Příspěvky: 51

PříspěvekZaslal: 2. březen 2015, 22:47:51    Předmět: Odpovědět s citátem

Přesně ty dlaždice mě napadly také. Pak by teoreticky šlo využít i image load/store operací v shaderech, ale tam je zase problém, že umí atomicAdd jen na signed/unsgined inty. Každopádně díky Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Vilem Otte



Založen: 18. 09. 2007
Příspěvky: 462
Bydliště: Znojmo - Sedlesovice, Kravi Hora

PříspěvekZaslal: 3. březen 2015, 04:01:15    Předmět: Odpovědět s citátem

Mozna trochu pomuze projit toto - http://www.seas.upenn.edu/~pcozzi/OpenGLInsights/OpenGLInsights-SparseVoxelization.pdf Smile
_________________
Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
mafian89



Založen: 21. 10. 2012
Příspěvky: 51

PříspěvekZaslal: 16. březen 2015, 08:02:31    Předmět: Odpovědět s citátem

Nějak jsem se moc nepohnul z místa. Tak mě napadlo, jestli by nešla nabindovat 3D textura do FBO(jak zmiňoval nou) a pak v geometry shaderu vybrat vrstva do která se bude kreslit (pomocí gl_Layer). Když jsem to tak udělal, tak je celá textura černá (samé nuly - kromě první vrstvy, kde je clear color).

GS vypadá takto:
kód:
#version 430
layout(points )in;
layout(points ,max_vertices = 1 )out;

void main(){
   gl_Position=gl_in[0].gl_Position; //zatim pro jeden bod
   gl_Layer = 1;
   EmitVertex();
   EndPrimitive();
}


VS jen přeposílá pozici a FS jen zapisuje barvu. Podle tohoto kódu bych čekal, že se něco zapíše do vrstvy 1 (tj. druhé), ale jak jsem říkal, jsou tam samé nuly. Je něco vyloženě špatně? Případně můžu odpoledne udělat minimalní vzorek kódu Smile Díky za případné tipy.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mafian89



Založen: 21. 10. 2012
Příspěvky: 51

PříspěvekZaslal: 16. březen 2015, 17:06:12    Předmět: Odpovědět s citátem

Přidávám link na archiv se zdrojáky (obsahuje VS 2013 projekt a všechny knihovny):
https://dl.dropboxusercontent.com/u/20467425/DevTalk/minimal_sources.zip
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



Založen: 28. 07. 2007
Příspěvky: 1047

PříspěvekZaslal: 16. březen 2015, 18:47:05    Předmět: Odpovědět s citátem

tak som si pozrel specifikaciu poriadne a musis pouzit glFramebufferTexture() aby fungoval gl_Layer.
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mafian89



Založen: 21. 10. 2012
Příspěvky: 51

PříspěvekZaslal: 16. březen 2015, 19:39:28    Předmět: Odpovědět s citátem

Díky za tip. Vyzkoušel jsem to a jediné, co jsem dostal byl unknow error při checku na FBO completness. Dělám chybu někde při připojování? Myslím, že to mám ok:
kód:
//predtim vytvorim FB pomoci glGenFramebuffers(1, &_fboId);
glBindTexture(GL_TEXTURE_3D, textureId); //texture ID je vytvořená textura
glBindFramebuffer(GL_FRAMEBUFFER, _fboId);
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,textureId, 0);
static const GLenum draw_buffers[] =
{
  GL_COLOR_ATTACHMENT0
};
glDrawBuffers(1, draw_buffers);


EDIT: Našel jse, chybu. Nebyla tady, ale vznikla při tom, když jsem připojil render buffer..
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna