【问题标题】:How is glDrawBuffers associated to drawing to a depth textureglDrawBuffers 如何与绘制深度纹理相关联
【发布时间】:2014-08-30 22:43:42
【问题描述】:

您可以指定使用哪些缓冲区进行绘制
glDrawBuffer()

示例
GLenum 缓冲区[] = { GL_COLOR_ATTACHMENT0 };
glDrawBuffers(1, 缓冲区);

好吧,这很有意义。

深度纹理怎么样?

所以我们在这里创建了一个帧缓冲区

    glGenFramebuffers(1, &m_uifboHandle);

    // Initialize FBO
    glBindFramebuffer(GL_FRAMEBUFFER, m_uifboHandle);

    unsigned int m_uiTextureHandle[2];
    glGenTextures( 2, m_uiTextureHandle );

    glBindTexture( GL_TEXTURE_2D, m_uiTextureHandle[x]);

    // Reserve space for our 2D render target
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

    glTexImage2D(GL_TEXTURE_2D, 0, iInternalFormat, uiWidth, uiHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
    glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_uiTextureHandle[0], 0); 

    //now the depth     
    glBindTexture(GL_TEXTURE_2D, m_uiTextureHandle[1]);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, uiWidth, uiHeight, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, 0);
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, m_uiTextureHandle[1], 0);

    glBindFramebuffer(GL_FRAMEBUFFER, 0);

所以如果这些步骤基本上是:
1) 制作一个框架来操作以渲染到
2) 为我们提供附件 0 的写入位置
3)创建我们的深度附件

现在我该怎么写呢?我看到了渲染自动渲染到它的示例,但我想了解绑定写入它的工作原理。

【问题讨论】:

    标签: opengl textures glsl depth-buffer render-to-texture


    【解决方案1】:

    glDrawBuffers 与深度缓冲区完全无关。它允许选择要渲染到的 color 缓冲区,并且每个帧缓冲区可以有多个颜色缓冲区。但是最多可以有一个深度缓冲区。所以要么根本没有深度缓冲区,要么有一个并且深度值被写入深度缓冲区(假设启用了深度测试并且深度掩码设置为GL_TRUE)。

    【讨论】:

    • 看到这就是我的想法,但我可以让颜色附件正常工作,但我无法让深度工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 2014-05-11
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    相关资源
    最近更新 更多