簡體   English   中英

OpenGL FBO無法渲染為紋理(C ++)

[英]OpenGL FBO does not render to texture (C++)

我一直在嘗試將茶壺渲染到FBO,然后將后續紋理用作紋理貼圖。 似乎什么都沒發生,所以我想知道自己做錯了什么。 下面是主循環:

//switch to fbo
glBindFramebuffer(GL_FRAMEBUFFER, fbo);

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glLoadIdentity();
gluLookAt(0.0,0.0,5.0, 
          0.0,0.0,-1.0,
          0.0f,1.0f,0.0f);

glLightfv(GL_LIGHT0, GL_POSITION, lpos);
glRotatef(a,0,1,1);
glutSolidTeapot(1);

   //switch to main

glBindFramebuffer(GL_FRAMEBUFFER, 0);
glLoadIdentity();
gluLookAt(0.0,0.0,5.0, 
          0.0,0.0,-1.0,
          0.0f,1.0f,0.0f);

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBindTexture(GL_TEXTURE_2D, img);


   //draw cube

glColor4f(1, 1, 1, 1);
    glBegin(GL_TRIANGLES);
    // front faces
    glNormal3f(0,0,1);
    // face v0-v1-v2
    glTexCoord2f(1,1);  glVertex3f(1,1,1);
    glTexCoord2f(0,1);  glVertex3f(-1,1,1);
    glTexCoord2f(0,0);  glVertex3f(-1,-1,1);
  ...draws cube

我嘗試使用glFramebufferStatus,它返回了“成功”

   glGenTextures(1, &img); 
glBindTexture(GL_TEXTURE_2D, img); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 512, 512, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);

glGenFramebuffers(1,&fbo);
glBindFramebuffer(GL_FRAMEBUFFER,fbo);
glGenRenderbuffers(1, &depthbuffer);    
glBindRenderbuffer(GL_RENDERBUFFER, depthbuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, 512, 512);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthbuffer);

glGenTextures(1, &img); 
glBindTexture(GL_TEXTURE_2D, img); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 512, 512, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);

glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, img, 0);

    glBindFramebuffer(GL_FRAMEBUFFER, fbo);


GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);

if (status==GL_FRAMEBUFFER_COMPLETE) {
    printf("success\n");
}

但是,我得到的只是沒有紋理映射的多維數據集。

這里有兩個可能的錯誤:

  1. 渲染到FBO失敗。 要檢查是否存在這種情況,請清除具有明顯背景顏色(例如粉紅色)的FBO,並查看紋理是否受到影響(例如,通過將其讀回CPU)。 您還應確保變換矩陣和視口( glViewport )正確。

  2. 紋理映射失敗。 確保已為紋理映射設置好所有內容,並首先使用靜態紋理測試紋理映射。

glEnable ( GL_TEXTURE_2D )呢?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM