我明白如何unproject的基本概念:屏幕位置逆投影,而不W¯¯
let mut z = 0.0;
gl::ReadPixels(x as i32, y as i32, 1, 1, gl::DEPTH_COMPONENT, gl::FLOAT, &z);
// window position to screen position
let screen_position = self.to_screen_position(x, y);
// screen position to world position
let world_position = self.projection_matrix().invert() *
Vector4::new(screen_position.x, screen_position.y, z, 1.0);
但是,這並不需要在W座標正確 - 當我呈現來自世界空間的東西到屏幕空間,他們最終與W != 1
,因爲角度轉換(https://www.opengl.org/sdk/docs/man2/xhtml/gluPerspective.xml)。當我從屏幕空間轉換回世界空間時(假設爲W=1
),對象位置錯誤。
據我所知,W
是所有其他座標的縮放因子。如果是這種情況,是不是意味着屏幕矢量(0, 0, -1, 1)
和(0, 0, -2, 2)
將映射到相同的窗口座標,並且未投影不一定會產生獨特的結果,而沒有進一步的工作?
謝謝!