我似乎只能將我的場景渲染到立方體貼圖的一側。在一切都硬編碼的那一刻,我只是想渲染場景相同的觀點到每個立方體貼圖的6個面的,就像這樣:OpenGL Framebuffer只寫入立方體貼圖的一張臉
glBindFramebuffer(GL_FRAMEBUFFER, m_FboId);
glViewport(0, 0, CUBEMAP_SIZE, CUBEMAP_SIZE);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
shader.bind();
shader.loadProjectionMtx(glm::perspective(90.0f, 1.0f, 0.001f, 300.0f)[0][0]);
shader.loadViewMtx(glm::lookAt(glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(1.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f))[0][0]);
for (unsigned int f = 0; f < 6; f++)
{
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_NEGATIVE_X + f, m_glId, 0);
for (unsigned int i = 0; i < entities.size(); i++)
{
// Rendering the scene like normal
}
}
glBindFramebuffer(GL_FRAMEBUFFER, 0);
根據什麼「GL_TEXTURE_CUBE_MAP_ .. 「__」value我給glFramebufferTexture2D()它總是將場景渲染到那一張臉上 - 就像它不會根據循環中的「f」的值來交換要呈現的臉部。
但是,一個渲染到的立方體面總是呈現正確的。
這裏的立方體貼圖& FBO創建代碼:
glGenFramebuffers(1, &m_FboId);
glBindFramebuffer(GL_FRAMEBUFFER, m_FboId);
glGenTextures(1, &m_TxId);
glBindTexture(GL_TEXTURE_CUBE_MAP, m_TxId);
for (unsigned int i = 0; i < 6; i++)
{
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB, CUBEMAP_SIZE, CUBEMAP_SIZE, 0, GL_RGB, GL_UNSIGNED_BYTE, (void*)nullptr);
}
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
glBindTexture(GL_TEXTURE_CUBE_MAP, 0);
glGenRenderbuffers(1, &m_DepthId);
glBindRenderbuffer(GL_RENDERBUFFER, m_DepthId);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, CUBEMAP_SIZE, CUBEMAP_SIZE);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_TxId, 0);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_DepthId);
glDrawBuffer(GL_COLOR_ATTACHMENT0);
int fbo_Status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if (fbo_Status != GL_FRAMEBUFFER_COMPLETE) printf(" ::ENGINE:: FBO Creation Failed! glError: %i\n", fbo_Status);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
我已經找到2其他相關案件的在線但是沒有得到解決
我認爲你應該用'GL_TEXTURE_CUBE_MAP_POSITIVE_X'替換'GL_TEXTURE_CUBE_MAP_NEGATIVE_X' ,因爲它是第一個立方體貼圖。 – SurvivalMachine
'glFramebufferTexture2D(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_TEXTURE_2D,m_TxId,0);'這行應該給出錯誤,因爲'm_TxId'不是2D紋理。這是一個立方體貼圖紋理。 –
嘿尼科爾,謝謝我已經從fbo初始化代碼中刪除了glFramebufferTexture2D()行,無論如何它是不必要的,仍然只有一個面被渲染到:( – HelloWorldCpp