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_y
和world_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
那里是