FBO深度缓冲区为红色

寻找艾格斯

我的影子系统无法正常工作。我使用以下代码生成我的FBO:

int frameBuffer = GL30.glGenFramebuffers();
GL30.glBindFramebuffer(GL30.GL_FRAMEBUFFER, frameBuffer);
GL11.glDrawBuffer(GL11.GL_NONE);
GL11.glReadBuffer(GL11.GL_NONE);

int texture = GL11.glGenTextures();
GL11.glBindTexture(GL11.GL_TEXTURE_2D, texture);
GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL14.GL_DEPTH_COMPONENT16, WIDTH, HEIGHT, 0,
GL11.GL_DEPTH_COMPONENT, GL11.GL_FLOAT, (ByteBuffer) null);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_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);
GL32.glFramebufferTexture(GL30.GL_FRAMEBUFFER, GL30.GL_DEPTH_ATTACHMENT, texture, 0);

GL30.glBindFramebuffer(GL30.GL_FRAMEBUFFER, 0);
GL11.glViewport(0, 0, Display.getDisplayMode().getWidth(), Display.getDisplayMode().getHeight());

我的实体在默认渲染器(输出vec4)中可以正常渲染。我的阴影着色器代码很简单:

#version 430
layout(location = 0) out float fragmentdepth;

void main(void){
    fragmentdepth =  gl_FragCoord.z;
}

我尝试在不使用任何FBO的情况下输出vec4(1.0),并且一切正常,因此我的计算正确,并且着色器代码也应正常工作。

我的抽奖电话看起来像这样:

GL30.glBindFramebuffer(GL30.GL_FRAMEBUFFER, frameBuffer);
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT|GL11.GL_DEPTH_BUFFER_BIT);
renderShadows();
GL30.glBindFramebuffer(GL30.GL_FRAMEBUFFER, 0);
renderAllItems();
Display.sync(FPS_CAP);
Display.update();
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT|GL11.GL_DEPTH_BUFFER_BIT);
GL11.glClearColor(0.2f,0.1f,0.1f , 1f);

当我调用“ renderAllItems();”时 我还在右上角渲染一个四边形,该四边形应显示我的深度纹理。但是我所看到的只是一个红色的四边形。它不应该是黑色/白色并显示一些东西吗?

尼科尔·波拉斯(Nicol Bolas)
GL32.glFramebufferTexture(GL30.GL_FRAMEBUFFER, GL30.GL_DEPTH_ATTACHMENT, texture, 0);

这会将纹理附加到帧缓冲区对象的深度附件。

layout(location = 0) out float fragmentdepth;

那是片段着色器用户定义输出用户定义的输出映射到片段的颜色,其中被写入颜色附件宗教组织的,而不是深度附件。

片段的深度是写入深度附件的内容。在FS中,这是内置gl_FragDepth输出但是,您没有理由写它。如果您不写,那么它将自动由填充gl_FragCoord.z

的确,如果您只想渲染深度,甚至不应该拥有片段着色器

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

绑定FBO(帧缓冲区对象)的成本有多高

来自分类Dev

如何将多重采样深度缓冲区解析为深度纹理?

来自分类Dev

OpenGL FBO不增加深度缓冲区

来自分类Dev

从片段着色器访问深度缓冲区

来自分类Dev

glsl es 2.0丢弃和深度缓冲区

来自分类Dev

OpenGL:glLoadMatrix和深度缓冲区

来自分类Dev

深度缓冲区和模板缓冲区问题QML

来自分类Dev

OpenGL帧缓冲区深度不起作用

来自分类Dev

从OpenGL中的默认帧缓冲区读取像素数据:FBO与PBO的性能

来自分类Dev

在C ++中实现栅格化和深度缓冲区

来自分类Dev

Direct2D深度缓冲区

来自分类Dev

深度缓冲区似乎不起作用-OpenGL Shader

来自分类Dev

在金属中如何清除深度缓冲区或模板缓冲区?

来自分类Dev

(阴影贴图)将深度缓冲区渲染为纹理并进行绘制以进行检查

来自分类Dev

将立方体贴图纹理附加到帧缓冲区对象(FBO)时为GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT

来自分类Dev

无法从Compute着色器读取深度缓冲区

来自分类Dev

深度+模板帧缓冲区问题

来自分类Dev

OpenGL ES上深度缓冲区的精度

来自分类Dev

在OpenGL中查看深度缓冲区

来自分类Dev

如何获得WGL创建32位深度的缓冲区?

来自分类Dev

在OpenGL ES 2.0中,将FBO与纹理深度缓冲区一起使用时,深度纹理缓冲区不起作用

来自分类Dev

错误的深度缓冲区(至纹理)输出?

来自分类Dev

在C ++中实现栅格化和深度缓冲区

来自分类Dev

Direct2D深度缓冲区

来自分类Dev

Flatbuffer缓冲区始终为空

来自分类Dev

默认帧缓冲区的采样深度?(GL ES 3)

来自分类Dev

LibGDX 如何从 FrameBuffer 获取深度缓冲区?

来自分类Dev

在 openGL 上将深度缓冲区显示为图像

来自分类Dev

节点红色。从缓冲区中提取字节

Related 相关文章

  1. 1

    绑定FBO(帧缓冲区对象)的成本有多高

  2. 2

    如何将多重采样深度缓冲区解析为深度纹理?

  3. 3

    OpenGL FBO不增加深度缓冲区

  4. 4

    从片段着色器访问深度缓冲区

  5. 5

    glsl es 2.0丢弃和深度缓冲区

  6. 6

    OpenGL:glLoadMatrix和深度缓冲区

  7. 7

    深度缓冲区和模板缓冲区问题QML

  8. 8

    OpenGL帧缓冲区深度不起作用

  9. 9

    从OpenGL中的默认帧缓冲区读取像素数据:FBO与PBO的性能

  10. 10

    在C ++中实现栅格化和深度缓冲区

  11. 11

    Direct2D深度缓冲区

  12. 12

    深度缓冲区似乎不起作用-OpenGL Shader

  13. 13

    在金属中如何清除深度缓冲区或模板缓冲区?

  14. 14

    (阴影贴图)将深度缓冲区渲染为纹理并进行绘制以进行检查

  15. 15

    将立方体贴图纹理附加到帧缓冲区对象(FBO)时为GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT

  16. 16

    无法从Compute着色器读取深度缓冲区

  17. 17

    深度+模板帧缓冲区问题

  18. 18

    OpenGL ES上深度缓冲区的精度

  19. 19

    在OpenGL中查看深度缓冲区

  20. 20

    如何获得WGL创建32位深度的缓冲区?

  21. 21

    在OpenGL ES 2.0中,将FBO与纹理深度缓冲区一起使用时,深度纹理缓冲区不起作用

  22. 22

    错误的深度缓冲区(至纹理)输出?

  23. 23

    在C ++中实现栅格化和深度缓冲区

  24. 24

    Direct2D深度缓冲区

  25. 25

    Flatbuffer缓冲区始终为空

  26. 26

    默认帧缓冲区的采样深度?(GL ES 3)

  27. 27

    LibGDX 如何从 FrameBuffer 获取深度缓冲区?

  28. 28

    在 openGL 上将深度缓冲区显示为图像

  29. 29

    节点红色。从缓冲区中提取字节

热门标签

归档