.[ ČeskéHry.cz ].
OpenGL - Framebuffer object

 
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
Kaemon



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

PříspěvekZaslal: 9. srpen 2010, 17:57:42    Předmět: OpenGL - Framebuffer object Odpovědět s citátem

Zdravím,
snažím se o renderování do textury a bohužel se mi nějak nedaří. Chci vykreslit krychli do textury a tu následně "natáhnout" na další krychli. Ovšem textura zůstává prázdná. Koukal jsem i do specifikace a můj kód se skoro shoduje s prvním příkladem vyjma depth bufferu.

Vytvoření a nastavení FBO:
kód:

//textury
GLuint tex1,tex2;
tex1=LoadTexture("test.png",GL_RGBA);

glGenTextures(1,&tex2);
glBindTexture(GL_TEXTURE_2D,tex2);
glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,256,256,0,GL_RGBA,GL_UNSIGNED_BYTE,NULL);

//vytvoření framebufferu
GLuint FBO=0;
glGenFramebuffers(1,&FBO);
glBindFramebuffer(GL_FRAMEBUFFER,FBO);
glFramebufferTexture2D(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_TEXTURE_2D,tex2,0);


Hlavní smyčka:
kód:
{
//vykreslení krychle do FBO
glViewport(0,0,256,256);
glBindFramebuffer(GL_FRAMEBUFFER,FBO);
glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);
glBindTexture(GL_TEXTURE_2D, tex1);
glBindVertexArray(vao);
glDrawArrays(GL_QUADS,0,24);
glBindFramebuffer(GL_FRAMEBUFFER,0);
glViewport(0,0,1024,768);

glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);


//otočení krychle
modelview=RotateX(rotation)*RotateY(rotation);
rotation+=(3.1415/10000);
glUniformMatrix4fv(ModelLocation, 1, GL_FALSE, modelview.data());

//Vykreslení krychle s texturou z FBO
glBindTexture(GL_TEXTURE_2D, tex2);
glBindVertexArray(vao);
glDrawArrays(GL_QUADS,0,24);


SDL_GL_SwapBuffers();
}


Budu vděčný za jakoukoliv radu.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



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

PříspěvekZaslal: 9. srpen 2010, 18:17:49    Předmět: Odpovědět s citátem

a dari sa ti kreslit priamo ak zakomentujes ten framebuffer?

je mozne ze tomu chyba depth buffer. vypni depth testing alebo pridaj depth attachment.

skontroluj FBO completnost cez glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER)

zmen glBindFramebuffer(GL_DRAW_FRAMEBUFFER, FBO)
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Kaemon



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

PříspěvekZaslal: 9. srpen 2010, 18:35:01    Předmět: Odpovědět s citátem

bez framebufferu se vše vykreslí v pořádku.
vypnutí depth testu nepomohlo, checkFBstatus vrací GL_FRAMEBUFFER_COMPLETE, glBindFB s DRAW nepomohlo.

renderbuffer:
kód:

   //vytvoření renderbufferu
   GLuint RB=0;
   glBindRenderbuffer(GL_RENDERBUFFER,RB);
   glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT,256,256);
   glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, RB);

   if(glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER)!=GL_FRAMEBUFFER_COMPLETE)
         {
               std::cout<<"chyba"<<std::endl;
         }

   glBindFramebuffer(GL_FRAMEBUFFER,0);
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



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

PříspěvekZaslal: 9. srpen 2010, 18:36:51    Předmět: Odpovědět s citátem

zabudol si glGenRenderbuffers(). a takto kresli sa ta kocka potom? mala by proste len bez textury.

zabudol si nastavit filtre pre druhu texturu. bez nich je nekopletna.
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



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

PříspěvekZaslal: 9. srpen 2010, 18:49:03    Předmět: Odpovědět s citátem

http://www.opengl.org/wiki/Common_Mistakes#Creating_a_Texture
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Kaemon



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

PříspěvekZaslal: 9. srpen 2010, 18:49:05    Předmět: Odpovědět s citátem

Bingo! Bylo to těma filtrama, díky moc.
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