有没有办法访问OpenGL的深度缓冲区
Is there any way to access depth buffer for OpenGL?
例如,有两个对象,我看到它们从(0,0,100)到(0,0,0)。
对象1:中心立方体(长/宽/高10)对象 2 : 球体位于中心(半径 5)
然后,我只能看到立方体(此时我不考虑视野和视图体积)
因为 openGL 使用 z 缓冲区算法,在窗口的中心,一个像素首先有四个深度值。深度 90(立方体正面),深度 110(立方体背面)深度 95 和 105(用于球体)
添加:然后 z 缓冲区仅显示立方体的颜色(深度 90,正面)
那么现在,我想获取保存在窗口中心的像素上的值 4。有什么方法可以获得该值吗?
这是一种倒退; 像素没有深度值。像素的颜色是根据场景中对象的深度、它们的相对位置和方向以及相机设置计算的。像素是所有这些的结果,而不是输入数据。
您可以在您感兴趣的点上执行相机变换的逆向运算,以便在场景的"空间"中获得一条线。然后,您可以将该线与场景中的对象相交;这些交集发生的地方是该像素后面对象的 Z 值。
但这一切似乎都倒退到正常的技术上。也许如果我们知道你想实现的目标,我们可以提出一个具体的解决方案。
使用以下 openGL API:
void glReadPixels( GLint x, GLint y, GLsizei width, GLsizei height,
GLenum format, GLenum type, GLvoid * data);
以及GL_DEPTH_COMPONENT作为format
参数。返回值介于 0 和 1 之间,您必须根据视锥体进行转换。您不会同时获得四个值。您可以单独渲染单个对象并读取所需的不同点。
- 深度缓冲区未填充阴影贴图渲染通道中的数据
- 从OpenGL应用程序中提取颜色/深度缓冲区
- 为什么为什么偏离gl_fragcoord.z偏离深度缓冲区
- DirectX-启用深度缓冲区后没有任何渲染
- OpenGL - 深度缓冲区在渲染半透明立方体时剪切掉不应该剪切的面
- C++深度缓冲区Oculus Rift DK2 VR HMD
- 多采样框架渲染对象和深度缓冲区
- GlReadPixel始终从深度缓冲区0中获取
- 有没有办法访问OpenGL的深度缓冲区
- Qopenglwidget和GlreadPixels和深度缓冲区
- 深度缓冲区的绝对距离
- 弄乱了OpenGL深度缓冲区
- OpenGL:只获取模具缓冲区而不获取深度缓冲区
- 使用帧缓冲区将深度缓冲区渲染到纹理中
- 是否可以在opengl中使用深度缓冲区渲染3D纹理
- Direct2D深度缓冲区
- OpenGL ES深度缓冲区渲染(iOS模拟器与真实设备)
- 深度缓冲区未正确渲染
- 将深度呈现缓冲区复制到深度缓冲区
- 为什么我们必须在渲染过程中清除 OpenGL 中的深度缓冲区