OpenGL,如何从一个点的坐标得到Zdepth值

问题描述:

我知道如何做相反的方法。 (从缓冲器读取的z deph然后使用unPjoject):OpenGL,如何从一个点的坐标得到Zdepth值

(...) 
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_x,world_yworld_z值,怎么一个拿到了depth

我们需要改造的矢量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 

那里是