c++ - OpenGL:指定将什么值写入深度缓冲区?

标签 c++ opengl depth depth-buffer

据我了解深度缓冲区,它计算片段与远/近裁剪平面的关系,并在写入之前从中推导出深度值。然而,这不是我想要的,因为我根本不使用剪裁平面或 3 维。但是,深度测试对我仍然有很大帮助。

我的问题,对于设置后渲染的所有几何体(通过 Alpha 测试),是否有任何方法可以手动指定将什么值写入深度缓冲区,而不管它的真实深度一个场景? Stencil 缓冲区以这种方式工作,其值指定为 glStencilFunc() 的第二个参数,因此我认为 glDepthFunc() 的行为可能类似,但我错了。

我需要在 2D 游戏中进行深度测试的主要原因是我的光照模型大量使用模板。必须首先渲染比光线更靠近相机的物体,以便正确布置阴影模板,然后再绘制灯光。这是一个非常棘手的绘制顺序,但基本上它只是意味着必须在场景绘制完成后绘制灯光,仅此而已。

我使用的 OpenGL 版本是 2.0,尽管我尽量避免使用片段着色器。

最佳答案

您似乎在谈论一种名为 Parallax scrolling 的技术.您不需要手动写入深度缓冲区,只需启用它,然后您就可以使用图层方法并为每个对象手动指定 Z。然后从前到后渲染场景(排序)。

enter image description here

关于c++ - OpenGL:指定将什么值写入深度缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21113457/

相关文章:

java - 我如何知道 Jtwitter 的转发深度?

c++ - Qt C++ QException 问题 : debug error

c# - 无论如何知道屏幕何时更新/刷新(可能是 OpenGL 或 DirectX?)

c++ - QGLBuffer 和 VBO

c - OpenGL 仅在使用多个纹理四边形时纹理坐标不正确

Kinect:如何从一些深度数据中获取骨架数据(从 kinect 获取但我修改了一些地方)

postgresql - PostgreSQL 函数的深度

c++ - 如何从 getifaddr 读取子网掩码

c++ - 传递堆栈对象的所有权而不重复

c++ - 是否有可能在 Qt QGraphicsScene 中获得顶级项目?