2012-08-13 228 views
0

我對ndc與屏幕座標系之間的關係感到困惑。 我所做的是從標準化設備座標到屏幕座標的關係?

  1. 選擇屏幕座標(例如觸摸點在屏幕上)。

  2. 然後通過屏幕座標gluUnproject。我將深度變量(gluUnproject的第三個變量)設置爲0.0f。

  3. 然後我乘以對象座標modelviewmatrix和projectionmatrix。

  4. 之後我剪掉了空間。然後我劃分爲W

  5. 夾子空間座標末尾i縮放的NDC座標到屏幕座標。
  6. 所以結果等於我第一次選擇的座標除了Z座標。實際上Z的結果等於-1.0f

此後我將gluUnproject的第三個變量更改爲1.0f,我認爲結果等於0.0f。但結果是1.0f。

因此,這裏的問題是什麼標準化的座標系和屏幕座標系之間的關係。我如何設置gluUnproject函數的深度變量?

回答

3

歸一化座標系與屏幕座標系的關係是什麼?

歸一化設備座標在[-1,+ 1]的範圍內表達,並從裁剪空間座標將它們除以它們的成分W獲得。

他們窗口空間被變換的座標由該視口參數和深度範圍的參數。


如何設置gluUnproject功能的深度變量?

如果要將窗口空間座標轉換回標準化設備座標,您需要在要轉換的點處的窗口空間z值。所以,直接從OpenGL FAQs

GLdouble z; 
glReadPixels (x, y, 1, 1, GL_DEPTH_COMPONENT, GL_DOUBLE, &z); 

請注意:在深度緩衝區的OpenGL店非線性的深度。