设为首页 加入收藏

TOP

OpenGL 投影矩阵的理解
2014-11-24 00:35:28 来源: 作者: 【 】 浏览:5
Tags:OpenGL 投影 矩阵 理解

opengl透视投影的视棱锥:


OpenGL 投影矩阵的理解



关于投影矩阵设置接口glFrustum / gluPerspective,我常常被问到两个问题:


1. 视棱锥中近平面很小,远平面很大,跟透视投影中“近大远小” 难道不矛盾?


[1]中3.3.1节 Perspective Projection一节中第一句:透视投影最显著特征是透视缩短,物体距离照相机越远,它在最终图像上看上去就越小。这就是常说的近大远小现象。


这节中间一段话给出了这个问题答案:


Objects that are closer to the viewpoint appear larger because they occupy a proportionally larger amount of the viewing volume than those that are farther away, in the larger part of the frustum.


和远处的物体相比,靠近视点的物体占据了视椎体中相对较大的区域,看上去更大一些。物体大小不变,透视投影中离视点越近在视椎体中所占比例越大;反之离视点越远在视椎体中所占比例越小。近大远小指的是比例,所以跟近、远平面实际大小无关。


2. znear和zfar红皮书上为何明确说明不能为负?


gluPerspective函数介绍的一句话:


near and far values the distances between the viewpoint and the clipping planes, along the negative z-axis. They should always be positive.


They should always be positive:near和far是表示视点到远近投影平面的距离,gluPerspective 设置视棱锥时,默认视点在(0,0,0)位置(虽然后续可以通过gluLookAt改变视点位置),距离当然不能为负。


along the negative z-axis:视点在原点,视线方向为负z轴,沿着z轴负方向,从近到远定义了两个切割平面为znear和zfar。


OpenGL 投影矩阵的理解


如上图,A1B1C1D1为近平面,A2B2C2D2为远平面。


引用

1. redbook:http://www.glprogramming.com/red/chapter03.html


相关阅读


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇基于OpenGL实现的多段Bezier曲线.. 下一篇Android Layout背景绘制不全的问题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: