我知道怎么做相反的方式。 (从缓冲区中读取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_x
,world_y
和world_z
值,如何获取depth
。
答案 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
它在那里