2017-03-07 35 views
0

我知道如何做相反的方法。 (從緩衝器讀取的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

回答

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 

那裏是

相關問題