OpenGL坐标系转化之投影坐标系
坐標系轉換
OpenGL中物體建立在各自的局部坐標系【模型坐標系】中,然后經過平移旋轉變換到【世界坐標系】中,然后根據視角的位置和方向轉換到【視角坐標系】中,然后根據投影關系,是正交投影還是透視投影,轉換到【投影坐標系】中,再然后轉換到NDC(Normalized Device Coordinate)【標準設備坐標系】中,再然后轉換到【窗口坐標系】中。
(OpenGL實際處理的是【標準坐標系】中的坐標,也即x、y、z在[-1,1]之間的坐標 ,從【標準坐標系】到【窗口坐標系】之間的轉換由窗口處理程序自動進行轉換,參數設定用glviewport設定。 【視角坐標系】到【標準坐標系】之間一步變換到位,不進行分解。)
每一次坐標轉換其實就是一個矩陣乘法。之所以弄這么多中間坐標系,而不是一次將坐標系轉換到窗口坐標系中,也是為了方便用戶交互操作,將坐標轉換參數解耦。
在之前的一篇文章中(https://i-got-it.blog.csdn.net/article/details/108508526)已經詳細說了【世界坐標系】如何轉換到【視角坐標系】中。
從【視角坐標系】到【標準坐標系】的
具體的公式推導,見http://www.songho.ca/opengl/gl_projectionmatrix.html
如果被墻了,可以看我另存的一份:http://note.youdao.com/noteshare?id=85a0cc9ce201db0851630892b6311665&sub=F155FD63E67F44CF8A09226629F32D6D
正交投影
透視投影
注意【視角坐標系】是右手坐標系,【標準坐標系】卻是左手坐標系。【標準坐標系】中的z坐標會在OpenGL中的深度測試中用到。注意【標準坐標系】與【視角坐標系】中的z坐標之間的非線性關系:在近裁剪面精度高,在原裁剪面精度低。其實這也符合模型渲染需要,距我們更近的物體前后關系相對準確一些,更加符合實際。
總結
以上是生活随笔為你收集整理的OpenGL坐标系转化之投影坐标系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 推导LookAt函数定义的视图矩阵
- 下一篇: 使用numba要注意的越界问题