OpenGL-有没有一种方法可以存储大于1的深度值?

OpenGL-有没有一种方法可以存储大于1的深度值?,opengl,framebuffer,depth-buffer,depth-testing,Opengl,Framebuffer,Depth Buffer,Depth Testing,我尝试在GPU上实现碰撞检测,如本文所示: 在第2步-网格生成中,我们使用深度测试来确保只写入比上一步更大的粒子ID 我现在通过将ID数除以粒子总数来实现这一点: gl_FragDepth=v_ID/u_totalParticleCount 但我担心,如果我到达一个有很多粒子的点,我将没有足够的精度 我尝试将RGBA32F纹理附加到帧缓冲区深度附件,但我想这是不允许的 有办法做到这一点吗?还是将我的ID放入0-1空间是唯一的方法 非常感谢 我不确定使用深度缓冲区是否是最佳路径,因为您所做的与深

我尝试在GPU上实现碰撞检测,如本文所示:

在第2步-网格生成中,我们使用深度测试来确保只写入比上一步更大的粒子ID

我现在通过将ID数除以粒子总数来实现这一点:

gl_FragDepth=v_ID/u_totalParticleCount

但我担心,如果我到达一个有很多粒子的点,我将没有足够的精度

我尝试将RGBA32F纹理附加到帧缓冲区深度附件,但我想这是不允许的

有办法做到这一点吗?还是将我的ID放入0-1空间是唯一的方法


非常感谢

我不确定使用深度缓冲区是否是最佳路径,因为您所做的与深度没有任何关系,而且很多硬件(尤其是AMD)都有一些关于深度的优化,您可能会破坏这些优化


有很多帧缓冲区格式可以支持您正在尝试做的事情,使用更干净的解决方案(例如,32位整数格式,最多可以处理40亿个粒子)

我不确定使用深度缓冲区是否是最佳路径,因为您所做的与深度没有任何关系,而且很多硬件(尤其是AMD)都有一些关于深度的优化,您可能会破坏这些优化

有很多帧缓冲区格式可以支持您正在尝试做的事情,使用更干净的解决方案(例如,32位整数格式,最多可以处理40亿个粒子)

深度夹持在
gldeptrange
指定的范围内。并将您提供的值钳制到范围[0,1]

有一个NVIDIA扩展可以关闭此钳制:。但除此之外,浮点深度缓冲区的存在主要是为了在[0,1]中提供更高的精度,而不是更大的数字

深度组件纹理必须使用。它们不存储RGBA;它们存储深度分量数据。因此,32位浮点图像格式将是
GL\u DEPTH\u component 32f

深度限制在
gldeptrange
指定的范围内。并将您提供的值钳制到范围[0,1]

有一个NVIDIA扩展可以关闭此钳制:。但除此之外,浮点深度缓冲区的存在主要是为了在[0,1]中提供更高的精度,而不是更大的数字

深度组件纹理必须使用。它们不存储RGBA;它们存储深度分量数据。因此,32位浮点图像格式应该是
GL\u DEPTH\u component 32f