gpt4 book ai didi

java - OpenGL E.S 2.0 在 LibGDX 中串行渲染到两个纹理时如何保持深度缓冲区完好无损?

转载 作者:太空宇宙 更新时间:2023-11-04 06:34:35 25 4
gpt4 key购买 nike

我想渲染到也填充深度缓冲区的颜色纹理。然后,我想将其他内容渲染到另一个纹理,但针对第一次渲染的深度缓冲区进行深度测试。

我对将打包深度值写入颜色纹理不感兴趣,我想保留第一次渲染时现有的填充深度缓冲区。全部通过 LibGDX 实现 OpenGL ES 2.0

所以我有一个带有深度缓冲区的 FBO。

  1. 我将单个允许的 COLOR_ATTACHMENT0 设置为 texA
  2. glCheckFramebufferStatus 返回完成
  3. 通过深度测试进行渲染(这会产生我期望的值)
  4. 将 FBO 的 COLOR_ATTACHMENT0 更改为 texB
  5. glCheckFramebufferStatus 返回完成
  6. 使用深度测试进行渲染(这就像第 3 步中的深度不存在一样)

我想我的查询真的是更改 COLOR_ATTACHMENT 是否会清除深度缓冲区?如果不是,我的代码中一定有不同的问题:(

最佳答案

该问题是由一些我没有预料到的 libgdx 行为引起的。 libgdx RenderContext 正在调用“Gdx.gl.glDisable(GL20.GL_DEPTH_TEST);”

如果未提供,libgdx ModelBatch 会为其自身创建一个 libgdx RenderContext 实例。当在 ModelBatch 实例上调用 begin 时,也会在 renderContext 上调用 begin。但前提是批处理创建了它自己的上下文。在 RenderContext 的开头,它禁用并关闭许多 gl 函数,包括深度测试。

解决方案是让您自己创建一个 RenderContext 实例并将其传递给您的 modelBatches。然后将两个模型批处理包装在对渲染上下文的开始结束调用中。请记住在调用批处理之前重新启用 gl 深度测试。

关于java - OpenGL E.S 2.0 在 LibGDX 中串行渲染到两个纹理时如何保持深度缓冲区完好无损?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25596836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com