计算深度缓冲值

时间:2013-07-14 14:07:32

标签: opengl depth-buffer

我搜索了答案,但我仍然没有找到一个可以理解的答案,所以我问如何计算深度缓冲区的值。

https://en.wikipedia.org/wiki/Z-buffering 这里的公式为图像: enter image description here

这里是我写的:
z'=(2 ^ d -1)*((远+近)/(2 *(远 - 近)+(1 / z)*(-far *近)/(远 - 近)+ 1/2) 当d是z缓冲区的深度时(在我的情况下是24位) 和z是顶点的z值。

我写了一个简单的代码并尝试运行它并读取深度缓冲区值并计算它,但我收到了不同的答案。

我的代码示例:

/* init */
#define CUBE_SIDE_SIZE 0.25
glViewport(0,0,WINDOW_WIDTH,WINDOW_HEIGHT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity(); 
glOrtho(-1, 1, -1, 1, -1, 1);
/* draw */
glEnable(GL_DEPTH_TEST);
glBegin(GL_QUADS);
glColor3f(1, 0, 0);
glVertex3f(-CUBE_SIDE_SIZE, -CUBE_SIDE_SIZE, -CUBE_SIDE_SIZE);
glVertex3f(-CUBE_SIDE_SIZE, CUBE_SIDE_SIZE, -CUBE_SIDE_SIZE);
glVertex3f(CUBE_SIDE_SIZE, CUBE_SIDE_SIZE, -CUBE_SIDE_SIZE);
glVertex3f(CUBE_SIDE_SIZE, -CUBE_SIDE_SIZE, -CUBE_SIDE_SIZE);
glEnd();

我从深度缓冲区读取0.375值。 我怎样才能通过计算得到这个值?

感谢。

1 个答案:

答案 0 :(得分:2)

nearValue为-1,farValue为+1。你的立方体是-0.25。所以距离近平面的距离是0.75。 z值缩放到深度范围,默认为[0,1]。由于farValue-nearValue = 2,这意味着深度值为0.75 / 2 = 0.375。

另外,您发布了透视投影的公式,但您使用了正交投影。

相关问题