OpenGL Shadow Map MultiAmpling
Posted: 07 Feb 2025, 01:31
Ich wollte die Schattenkarten -Textur mit mehreren Proben < /p>
Ich habe ein Multisample aktiviert: < /li>
< /ol>
In der Schleife Ich setze den Ansichtsfenster Glviewport (0, 0, 1024, 1024) , binden Sie die Tiefenrahmenbuffer, zeichnen Sie die Szene, FrameBuffer entbinden. Dann Bind aufgelöstes Framebiffer und blitzt es: < /p>
Ansichtsfenster Glviewport (0, 0, 1600, 900) , löschen und zeichnen Sie die Szene, Swapbuffers und haben Sie einen schwarzen Bildschirm
Was habe ich falsch gemacht?
Ich habe ein Multisample aktiviert: < /li>
< /ol>
Code: Select all
glfwWindowHint(GLFW_SAMPLES, 4);
glEnable(GL_MULTISAMPLE);
< /code>
Konfigurierte Tiefenkarte Frambuffer und Textur: < /li>
< /ol>
const unsigned int SHADOW_WIDTH = 1024, SHADOW_HEIGHT = 1024;
unsigned int depthMapFBO;
glGenFramebuffers(1, &depthMapFBO);
// create depth texture
unsigned int depthMapTexture;
glGenTextures(1, &depthMapTexture);
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, depthMapTexture);
glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, 4, GL_DEPTH_COMPONENT, SHADOW_WIDTH, SHADOW_HEIGHT, GL_TRUE);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D_MULTISAMPLE, depthMapTexture, 0);
glDrawBuffer(GL_NONE);
glReadBuffer(GL_NONE);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
< /code>
3.Configured Dreadtie Tiefe Frambuffer und Textur: < /p>
GLuint resolveFramebuffer;
glGenFramebuffers(1, &resolveFramebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, resolveFramebuffer);
// resolve texture
GLuint resolvedDepthTexture;
glGenTextures(1, &resolvedDepthTexture);
glBindTexture(GL_TEXTURE_2D, resolvedDepthTexture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, SHADOW_WIDTH, SHADOW_HEIGHT, 0, GL_DEPTH_COMPONENT, GL_FLOAT, nullptr);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, resolvedDepthTexture, 0);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
Code: Select all
glBindFramebuffer(GL_READ_FRAMEBUFFER, depthMapFBO);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, resolveFramebuffer);
glBlitFramebuffer(0, 0, SHADOW_WIDTH, SHADOW_HEIGHT, 0, 0, SHADOW_WIDTH, SHADOW_HEIGHT, GL_DEPTH_BUFFER_BIT, GL_NEAREST);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
Was habe ich falsch gemacht?