Ich versuche, die Tiefe einer Szene zu einer Cubemap-Textur zu rendern, aber wenn ich den Framebuffer-Status überprüfe, gibt es GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT zurück und natürlich erfolgt kein Rendering. Offensichtlich vermisse ich etwas, aber ich kann mir das nicht vorstellen, ich hatte gehofft, dass mir jemand hier helfen könnte. Meine Grafikkarte ist eine NVIDIA GeForce 840M, die OpenGL 4.5 unterstützt. Unten ist, wie ich das Rendering auf die FBO eingerichtet habe.Warum bekomme ich unvollständige Anhänge, wenn ich opengl fbo zum Rendern auf Cubemap-Tiefenstruktur einstelle?
UPDATE: Bringen Sie alle cubefacetextures vor Schleife Rendering
GLuint texhandle;
glGenTextures(1, &texhandle);
glBindTexture(GL_TEXTURE_CUBE_MAP, texhandle);
for (int i = 0; i < 6; i++) {
glTexImage2D(
GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0,
GL_DEPTH_COMPONENT24, 1600, 900,
0, GL_DEPTH_COMPONENT, GL_FLOAT, 0
);
}
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
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);
GLuint fbohandle;
glGenFramebuffers(num, &fbohandle);
glBindFramebuffer(GL_FRAMEBUFFER, fbohandle);
glCullFace(GL_BACK);
for (int i = 0; i < 6; i++) {
glFramebufferTexture2D(
GL_FRAMEBUFFER,
GL_DEPTH_ATTACHMENT,
GL_TEXTURE_CUBE_MAP_POSITIVE_X + i,
fbohandle,
0
);
}
for (int i = 0; i < 6; i++) {
GLenum cubemapSide = GL_TEXTURE_CUBE_MAP_POSITIVE_X + i;
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, cubemapSide, fbohandle, 0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glDrawBuffer(GL_NONE);
CheckFramebufferStatus();
RenderScene()
}
Sollten Sie nicht alles außer 'glFramebufferTexture2D' außerhalb der Schleife tun? Wenn Sie gerade das erste Gesicht angebracht haben, ist es nicht verwunderlich, dass der Framebuffer unvollständig ist. – BDL
Richtig, macht Sinn, aber verwende ich nicht glFramebufferTexture2D, um anzugeben, welches Gesicht ich rendere? Wie auch immer, ich habe eine Schleife hinzugefügt, um Flächen vor der Rendering-Schleife anzuhängen, bekomme aber trotzdem den gleichen Fehler. – crimsoncheesecake
glDrawBuffer (GL_NONE); macht keinen Sinn ... – starmole