OpenGL,如何从点的坐标获取Zdepth值

时间:2017-03-07 20:42:04

标签: opengl math matrix

我知道怎么做相反的方式。 (从缓冲区中读取z-deph,然后使用unPjoject):

(...)
glReadPixels(x, y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, depth)
gluUnProject(x, y, depth, view_matrix, projection_matrix, viewport, world_x, world_y, world_z)

return world_x, world_y, world_z

但我该怎么办呢? 我有world_xworld_yworld_z值,如何获取depth

1 个答案:

答案 0 :(得分:0)

我们需要将矢量转换为2d并获得w component

prj = perspective_matrix * Vector((world_x, world_y, world_z, 1.0f))

现在我们需要规范化z component(Z值介于-1和1之间)

z_depth = prj.z / proj.w

出于某些愚蠢的原因,OpenGL要求它应该移动到[0,1]范围

z_depth = (z_depth + 1) / 2

它在那里