Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Kaemon
Založen: 28. 07. 2007 Příspěvky: 33
|
Zaslal: 9. srpen 2010, 17:57:42 Předmět: OpenGL - Framebuffer object |
|
|
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 |
|
 |
nou

Založen: 28. 07. 2007 Příspěvky: 1050
|
Zaslal: 9. srpen 2010, 18:17:49 Předmět: |
|
|
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 |
|
 |
Kaemon
Založen: 28. 07. 2007 Příspěvky: 33
|
Zaslal: 9. srpen 2010, 18:35:01 Předmět: |
|
|
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 |
|
 |
nou

Založen: 28. 07. 2007 Příspěvky: 1050
|
Zaslal: 9. srpen 2010, 18:36:51 Předmět: |
|
|
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 |
|
 |
nou

Založen: 28. 07. 2007 Příspěvky: 1050
|
|
Návrat nahoru |
|
 |
Kaemon
Založen: 28. 07. 2007 Příspěvky: 33
|
Zaslal: 9. srpen 2010, 18:49:05 Předmět: |
|
|
Bingo! Bylo to těma filtrama, díky moc. |
|
Návrat nahoru |
|
 |
|