码迷,mamicode.com
首页 > 其他好文 > 详细

Model, View(Camera), Perspective (3)

时间:2019-10-06 16:35:53      阅读:78      评论:0      收藏:0      [点我收藏+]

标签:情况   osi   运算   两种   函数   输出   view   就会   过程   

最后一篇博客讲一下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 (3)

标签:情况   osi   运算   两种   函数   输出   view   就会   过程   

原文地址:https://www.cnblogs.com/zhlabcd/p/11627392.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!