Model, View(Camera), Perspective
Posted zhlabcd
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Model, View(Camera), Perspective相关的知识,希望对你有一定的参考价值。
最后一篇博客讲一下Perspective(透视)。
在顶点运算器的最后,OpenGL希望所有的坐标落在一个特定的范围内,超出这个范围的物体就会被裁剪或者重新渲染。而从观察空间变化到裁剪空间,所需要的就是投影矩阵,投影矩阵有两种,一种是正射投影(ortho),另一种是透视投影(perspective)。
创建正射投影可以用函数glm::ortho,透视投影可以用函数glm::perspective。
正射投影会直接将坐标映射到2D平面,但是直接正射的话会产生一个不真实的结果,我们知道3D空间中都有透视的概念(近大远小),因此实际情况中更多采用的是透视投影(透视投影矩阵会自动修改w坐标的值,离观察者越远的w分量越大,最后输出会将x, y, z坐标除以w分量,既透视除法)。
实际上正射投影也有w分量,但是正射投影矩阵不会改变w分量,因此也就无法达成透视的效果。
透视完成之后,我们可以将所有的变换组合到一起,相乘,再赋值给gl_Position(从右往左)。
OpenGL然后对裁剪坐标执行透视除法从而将它们变换到标准化设备坐标。OpenGL会使用glViewPort内部的参数来将标准化设备坐标映射到屏幕坐标,每个坐标都关联了一个屏幕上的点(在我们的例子中是一个800x600的屏幕)。这个过程称为视口变换。
以上是关于Model, View(Camera), Perspective的主要内容,如果未能解决你的问题,请参考以下文章