OpenGL的gluLookAt和glOrtho的关系

本文探讨了OpenGL中gluLookAt与glOrtho函数的作用及联系,解释了如何通过这两种变换来正确设置摄像机视角与投影空间,确保图形可见。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OpenGL的gluLookAt和glOrtho的关系

一直不明白gluLookAt()和glOrtho()两者之间的关系:
gluLookAt()是观察变换,glOrtho()是正交投影。
glLookAt()是摄像机的位置,glOrtho()是将当前的可视空间设置为正投影空间。
gluLookAt()作用MODELVIEW矩阵,glOrtho()作用PROJECTION矩阵。

可有时画的图形看不见,有时又可以看见,那它们到底有什么联系呢?我们往下看:

先看看这两个函数的定义:
void glOrtho(GLdouble left,
         GLdouble right,
          GLdouble bottom,
          GLdouble top,
          GLdouble near,
          GLdouble far);

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

代码实例:

glOrtho(-1,1,-1,1,-3,3);
gluLookAt(0,0,2.9,0,0,0,0,1,0);

glColor3f(1.0, 0.0, 0.0);
glViewport(0, 0, 400, 400);
glBegin(GL_LINES);
    glVertex3f(-1.0, 0,-0.1);
    glVertex3f(1.0, 0 ,-0.1);
    glVertex3f(0.0, -1.0,-0.1);
    glVertex3f(0.0, 1.0 ,-0.1);
glEnd();

使用gluLookAt函数设定的摄像机范围,但是其视野就是glOrtho中的near和far。如上面的那个程序其远近在(2.9+3,2.9-3)这个范围内,所以-0.1刚好擦边,这两条线还能看到。

而且,如果你的图形画在了摄像机的后面,可是在<5.9这个范围内(这两个视野的范围都是开区间),还是可以看到图形的。

所以为了逻辑上的对应,我们应该将near和far都写成正的,这个正的方向是指的,从摄像机指向负轴方向的距离。

转载于:https://www.cnblogs.com/1024Planet/p/5644426.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值