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坐标之间的非线性关系:在近裁剪面精度高,在原裁剪面精度低。其实这也符合模型渲染需要,距我们更近的物体前后关系相对准确一些,更加符合实际。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值