2012-10-06 1 views
1

은 내가 픽셀의 깊이를 얻기 위해이 기능을 사용하려면 내 3D 장면함수에서 읽은 깊이 데이터의 의미는 무엇입니까? glReadPixels glut?

glReadPixels(300,//xPos 
      300,//yPos 
      1,1,//size 
      GL_DEPTH_COMPONENT,//type is depth 
      GL_FLOAT,//return type is float 
      &point); 

을 표시 과잉을 사용합니다. 그러나 반환 된 데이터는 0.999872, 0.999921..... 가 어떻게 (카메라에 개체에서) 실제 깊이

+1

glReadPixels는 GLUT가 아닌 OpenGL의 일부입니다. – datenwolf

답변

0

내가 사용하려는를 이 함수는 픽셀의 깊이를 가져옵니다. 그러나 반환 된 데이터는 항상 0.999872, 0.999921와 같은 범위 [0,1]에 있습니다.

값은 glDepthRange로 설정된 범위 내에 있습니다. 기본값은 [0, 1]입니다.

나는 다시 세계 공간으로 화면 공간 좌표를 (당신이 무엇을) 투영하여

(카메라에 개체에서) 실제 깊이로 어떻게 변환 할 수 있습니다. 이 경우 gluUnProject을 사용할 수 있습니다. model 받아 들일 수있는 행렬은 원하는 공간에 따라 다릅니다. OpenGL에는 카메라가 없으므로 사용자가 정의한보기 매트릭스에 따라 다릅니다. 당신은 드로잉 코드를 보여주지 않았기 때문에 필요한 뷰 매트릭스를 유지하기 위해 모델 뷰 매트릭스의 복사본을 어느 시점에서 가져올 지 말할 수 없습니다.

0

glReadPixels 설명서를 변환 할 수 있습니다 같은 범위 [0,1] 항상 :

    Depth values are read from the depth buffer. 
        Each component is converted to floating point such that the minimum depth 
        value maps to 0 and the maximum value maps to 1. 
        Each component is then multiplied by GL_DEPTH_SCALE, 
        added to GL_DEPTH_BIAS, 
        and finally clamped to the range [0, 1]