openGL 平行投影和透视投影函数分析

glViewport(GLint x, GLint y, GLsizei width, GLsizei height);


在窗口中定义一个像素矩形,最终的图像会映射到这个矩形中。(x,y)指定了的视口的左下角,width和height指定了这个视口矩形的宽度和高度。在默认情况下,视口的初始值为(0, 0, winWidth, winHeight),其中winWidth和winHeight指定了窗口大小。你可以将其想像为数码相机的显示屏,是最终成像的地方。




gluLookAt(GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz);


定义一个视图矩阵,并将其与当前矩阵相乘。目标观察点由eyex,eyey,eyez指定,centerx, centery, centerz指定了视线上的任意一点。upx,upy和upz指定表示哪个方向是向上的(也就是说,在视景体中至下向上的方向)。你可以将其想像为一个数码相机,放置在一定的位置并使镜头指向一个方向。默认值为gluLookAt(0.0, 0.0, 0.0, 0.0, 0.0, -100.0, 0.0, 1.0, 0.0),表示数码相机位于原点并指向z轴负方向,以y轴的正方向为向上方向。




glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);


创建一个表示透视视图平截头体的矩阵,并把它与当前矩阵相乘。如果观察点为默认情况时,平截头体的视景体是由这个函数的参数定义:(left, bottom, -zNear)和(right, top, -zNear)分别指定了近侧裁剪平面左下角和右上角的(x,y,z)坐标。zNear和zFar分别表示从观察点到近侧和远侧裁剪平面的距离,它们都应该是正值。你可以将其想像为数码相机的视野范围(视景体)。






gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar);


创建一个表示透视视图平截头体的矩阵,并把它与当前矩阵相乘。fovy是yz平面上视野的角度,它的值必须在[0.0, 180.0]之间。aspect是这个平截头体的横纵比,也就是宽度除以高度。如果观察点为默认情况时,zNear和zFar分别表示从观察点到近侧和远侧裁剪平面的距离,它们都应该是正值。该函数是glFrustum(...)函数的替代函数。






视景体有两个用途。首先,视景体定义了一个场景如何映射到屏幕上(即通过透视投影还是正投影);其次,视景体定义了哪此场景(或场景的一部分)被剪裁到最终的图像之外。


透视投影:与我们平时眼睛所见到的物体一样,满足近大远小的原则;正投影:不论物体距离观察点的远近,我们所看到物体的大小保持不变。




glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble nFar);


创建一个表示正交平行视景体的矩阵,并把它与当前矩阵相乘。如果观察点为默认情况时,正交平行视景体是由这个函数的参数定义:(left, bottom, -zNear)和(right, top, -zNear)分别指定了近侧裁剪平面左下角和右上角的(x,y,z)坐标。zNear和zFar分别表示从观察点到近侧和远侧裁剪平面的距离,它们可以为正值或负值,甚至可以设置为0,但不能取相同的值。你可以将其想像为数码相机的视野范围(视景体)。






glOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top);
创建一个表示将二维坐标投影到屏幕上的矩阵,并把它与当前矩阵相乘。剪裁区域为矩形,(left, bottom)和(right, top)分别表示剪裁区域的左下角和右上角的坐标。该函数为glOrtho的二维版本。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值