Я просто пытаюсь вывести текстуру, созданную FBO, на экран, пока я гуляю по миру, поэтому эффективно делаю 2 вида сцены. Проблема заключается во всем, что отображается, пока glEnable (GL_DEPTH_TEST); отображается как черный, если я отключаю тест глубины, он работает так, как я хочу, но, очевидно, тогда у меня нет тестирования глубины.
Это вложения для моего FBO
unsigned int WaterFBO::CreateTextureAttachment(int width, int height)
{
unsigned int texture;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, nullptr);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, texture, 0);
return texture;
}
unsigned int WaterFBO::CreateDepthTextureAttachment(int width, int height)
{
unsigned int texture;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32, width, height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, nullptr);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glFramebufferTexture(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, texture, 0);
return texture;
}
unsigned int WaterFBO::CreateDepthBufferAttachment(int width, int height)
{
unsigned int depthBuffer;
glGenRenderbuffers(1, &depthBuffer);
glBindRenderbuffer(GL_RENDERBUFFER, depthBuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, width, height);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthBuffer);
return depthBuffer;
}
и как мне создать FBO
void WaterFBO::InitRefracBuffer()
{
refractionFrameBuffer = CreateFrameBufferObject();
refractionTexture = CreateTextureAttachment(REFRACTION_WIDTH, REFRACTION_HEIGHT);
refractionDepthTexture = CreateDepthTextureAttachment(REFRACTION_WIDTH, REFRACTION_HEIGHT);
UnBindCurrentFrameBuffer();
}
только что нашел, если я закомментировал создание буфера глубины, тогда он также работает, как тест глубины отключен, поэтому я предполагаю, что он неправильно создает буфер глубины?
void WaterFBO::InitRefracBuffer()
{
refractionFrameBuffer = CreateFrameBufferObject();
refractionTexture = CreateTextureAttachment(REFRACTION_WIDTH, REFRACTION_HEIGHT);
//refractionDepthTexture = CreateDepthTextureAttachment(REFRACTION_WIDTH, REFRACTION_HEIGHT);
UnBindCurrentFrameBuffer();
}