首页 > 上网技巧 > 电脑小技巧 > OpenGL的gluLookAt()和 glOrtho()

OpenGL的gluLookAt()和 glOrtho()

时间:2020-04-18 11:51 作者:QQ地带 我要评论

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.1
 
 
 
f到距离摄像机最远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,所以依旧是看不到的。
 
下面我们恢复代码,使直线可见,修改代码如下
 
 
 
gluLookAt(0.0f,0.0f,-5.0f,0.0f,0.0f,0.0f,0.0f,-1.0f,0.0f);
再次运行程序,结果为
 
 
 
 
 
发现直线向下了,那是因为摄像机头朝下了,所以看到的鲜果也跟着变了,大家可以修改其他参数,看看运行结果是不是和自己摄像的一样。
 
 
 

标签: OpenGL
顶一下
(0)
0%
踩一下
(0)
0%

Google提供的广告