gluLookAt() 和 glOrtho() 的个人理解

转自http://blog.csdn.net/songjiaweizangai/article/details/40479293

gluLookAt函数原型为:

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

该函数简单来说可以理解为在一个三维世界中,摄像机的坐标位置以及朝向等信息,要确定一个摄像机子世界中的状态,就需要该函数的参数来确定。前三个参数为摄像机的位置坐标,在该位置上,摄像机可以360°进行观察;那么接下来的三个参数标示摄像机正对着的目标位置,也就是摄像机所观察的方向。最后三个参数决定了摄像机的放置状态,像是在现实世界中,摄像机可以使正放,侧放或者倒立放置等等,一样的,在opengl中,我们的摄像机也可以这样调整,如果最后三个参数为(0,1,0),那么标示摄像机是正立着的,(0,-1,0)的时候则是倒立放置的。

glOrtho()的函数原型为:

void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble near,GLdouble far);

该函数决定了我们在三维世界中所能观察到的一个矩形区域,第一三五个参数决定了矩形区域左下前点的位置,二四六决定矩形区域右上后点的位置,注意该点不是世界坐标,而是相对摄像机的位置。


比如我们在一个场景中绘制一条线,我们初始化函数中的代码为


    glMatrixMode(GL_PROJECTION);
	glLoadIdentity();

	glOrtho(-3.0f,3.0f,-3.0f,3.0f,0.1f,5.0f);
	gluLookAt(0.0f,0.0f,-5.0f,0.0f,0.0f,0.0f,0.0f,1.0f,0.0f);

	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();

我们把摄像机放到(0,0,-5)的位置,视野区域为左到-3,右到3,下到-3,上到3,在距离摄像机前最近0.1f 到距离摄像机最远5.0f的范围内,是我们可以观察到的位置,超出该区域则看不到了,在绘制函数中代码为

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glLoadIdentity();

	glColor3f(1.0f,0.0f,0.0f);
	glBegin(GL_LINES);
		glVertex3f(0.0f,0.0f,0.0f);
		glVertex3f(0.0f,2.0f,0.0f);
	glEnd();

我们画了一条从(0,0,0)到(0,2,0)的红色直线。


现在我们修改规定可视区域大小的参数

glOrtho(-3.0f,3.0f,-3.0f,3.0f,0.1f,4.0f);

再次运行该程序:


这时候,我们把我们的视野最远设置为4.0f,而摄像机所在的位置为(0,-5,0),明显我们如果再看刚刚绘制的那条直线是看不到的,因为直线距离我们的视野太远了,超出了我们的视野范围,所以什么都看到。

我们再次修改参数为

glOrtho(-3.0f,3.0f,-3.0f,3.0f,6.0f,10.0f);

这时候我们把可视范围设置为距离摄像机最近6.0的位置,最远10.0的范围内为可视区域,而摄像机在(0,-5,0)的位置,而我们绘制的直线距离摄像机距离为5.0,所以依旧是看不到的。





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值