OpenTK顶点似乎总是写入深度缓冲区中的0

本文关键字:缓冲区 深度 顶点 OpenTK | 更新日期: 2023-09-27 18:25:03

所以我有一个2D游戏引擎,我正在努力添加深度缓冲区,这样我就可以随意地在彼此前后绘制东西。我要求我的GameWindow在初始化时创建一个深度缓冲区,启用深度测试,将depthFunction更改为depthFunction。Less,将DepthMask设置为true,将depth Range设置为0.0-1.0,并将我所有的GL.Vector2调用更改为GL.Vectr3调用,z是我希望它绘制的深度。然而,每当我绘制任何东西时,它似乎都是在0的深度绘制的,而不管我传递给GL.Vector3的z值是多少。我有三个矩形在彼此的顶部绘制,偏移量略有不同。红色在0深度,蓝色在1深度,紫色在0.5f深度,它们按顺序绘制(红-蓝-紫),看起来像图像1。然而,如果我将DepthFunc更改为DepthFunction.Lequal,我会在图2中得到结果。在绘制顶点时,除了顶点的z值之外,是否还需要设置一些内容来定义它们的深度?此外,我有一个正交矩阵设置与此代码:

GL.MatrixMode(MatrixMode.Projection);
GL.LoadIdentity();
GL.Ortho(-window.ClientSize.Width / 2f, window.ClientSize.Width / 2f,
window.ClientSize.Height / 2f, -window.ClientSize.Height / 2f, 0.0f, 1.0);

这和它有关系吗?

图1:https://i.stack.imgur.com/bqUT0.png图2:https://i.stack.imgur.com/EUaMk.png

OpenTK顶点似乎总是写入深度缓冲区中的0

好吧,经过几个小时的调试,我似乎已经开始工作了。为了将来参考,我想我修复它的方法是在我调用draw函数中的GL.ClearDepth()之后,将我的GL.DepthFunc()和GL.DephMask()调用移到右边,而不是在GL.Enable(EnableCap.DepthTest)和GL.DepthRange(0.1f,1.0f)旁边的初始化函数中。希望这对将来的人有所帮助。