【问题标题】:OpenGL framebuffer depth not workingOpenGL帧缓冲区深度不起作用
【发布时间】:2016-03-25 07:08:26
【问题描述】:

当我只使用后台缓冲区时,这可以正常工作,但是当我使用帧缓冲区时,对象不会在大于 1 的距离处渲染(在视图空间中)。这是使用 OpenGL 3.2 上下文。

    colorTextureID = GL11.glGenTextures();
    depthTexutreID = GL11.glGenTextures();
    frameBufferID = GL30.glGenFramebuffers();

    GL11.glBindTexture(GL11.GL_TEXTURE_2D, colorTextureID);
    GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR);
    GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);
    GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_REPEAT);
    GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_REPEAT);
    GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA, width, height, 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, (ByteBuffer) null);
    GL11.glBindTexture(GL11.GL_TEXTURE_2D, 0);

    GL11.glBindTexture(GL11.GL_TEXTURE_2D, depthTexutreID);
    GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST);
    GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
    GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL12.GL_CLAMP_TO_EDGE);
    GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL12.GL_CLAMP_TO_EDGE);
    GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL14.GL_DEPTH_COMPONENT32, width, height, 0, GL11.GL_DEPTH_COMPONENT, GL11.GL_FLOAT, (ByteBuffer) null);
    GL11.glBindTexture(GL11.GL_TEXTURE_2D, 0);

    GL30.glBindFramebuffer(GL30.GL_FRAMEBUFFER, frameBufferID);
    GL30.glFramebufferTexture2D(GL30.GL_FRAMEBUFFER, GL30.GL_COLOR_ATTACHMENT0, GL11.GL_TEXTURE_2D, colorTextureID, 0);
    GL32.glFramebufferTexture(GL30.GL_FRAMEBUFFER, GL30.GL_DEPTH_ATTACHMENT, depthTexutreID, 0);

    if (GL30.glCheckFramebufferStatus(GL30.GL_FRAMEBUFFER) != GL30.GL_FRAMEBUFFER_COMPLETE)
        throw new RuntimeException("Frame buffer is not complete");

    GL30.glBindFramebuffer(GL30.GL_FRAMEBUFFER, 0);

【问题讨论】:

  • 检查您的视图和投影矩阵
  • 当我不使用帧缓冲区时它工作正常,所以它与矩阵无关。
  • 从技术上讲,如果不使用帧缓冲区,则无法进行渲染。尝试GL_DEPTH_COMPONENT32F,可能正在进行驱动程序转换
  • 它仍然不能与GL_DEPTH_COMPONENT32F一起使用
  • 我正在使用 OpenGL 3.2,如果这有什么不同的话。

标签: java opengl lwjgl opengl-3


【解决方案1】:

这与帧缓冲区无关,我在渲染帧缓冲区时忘记将模型和视图矩阵设置为标识。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    相关资源
    最近更新 更多