OpenGL函数思考-gluLookAt
2014-03-05 09:45
537 查看
函数原型:
void 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()这个函数指定一个视图矩阵,一般在执行命令glMatrixMode(GL_MODELVIEW)和glLoadidentity()之后使用;该函数定义了视点矩阵,并用该矩阵乘以当前矩阵。eyex、eyey、eyez定义了视点的位置;centerx、centery和centerz变量指定了参考点的位置,该点通常为相机所瞄准的场景中心轴线上的点;upx、upy、upz变量指定了向上向量的方向。
通常,视点转换操作在模型转换操作之后发出,以便模型转换先对物体发生作用。场景中物体的顶点经过模型转换之后移动到所希望的位置,然后再对场景进行视点定位等操作。模型转换和视点转换共同构成模型视景矩阵。
这个函数是对模型矩阵进行变换(GL_MODELVIEW),而gluPerspective函数是对投影矩阵进行变换(GL_PROJECTION),这一点一定要搞清楚。在实际应用时,可以用gluPerspective函数设置近平面、远平面。
透视原理:
我们知道,远处的东西看起来要小一些,近处的东西看起来会大一些,这就是透视原理,如下图所示
![](http://hi.csdn.net/attachment/201202/2/0_1328168721Iv1L.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/30/3122477d2ffb19c4284caacddb796be2.gif)
假设那两条线表示公路,理论上讲,它们的两条边是平行的, 但现实情况中,它们在远方(可以无限远)总要相交于一点,实际线段AB的长度=CD的长度,只是在此例中使用了透视角,故会有如上的效果,是不是很接近现实的情况?
结合gluLookAt()这个命令:
它共接受三对坐标, 分别为eye,center,up,
eye: 表示我们眼睛在"世界坐标系"中的位置,
center:表示眼睛"看"的那个点的坐标,
up: 表示观察者本身的方向,如果将观察点比喻成我们的眼睛,那么这个up则表示我们是正立还是倒立异或某一个角度在看,所看的影像大不相同,故此时需要指明我们现在正立,那么X,Z轴为0,Y轴为正即可,通常将其设置为1,只要表示一个向上的向量(方向)即可。
球是画在世界坐标系的原点上的,即O(0,0,0)坐标上,我们的眼睛位于观察点A(0,0,100),Z轴向屏幕里看去的方向为负,屏幕外我们的位置,Z轴为正值,其实很好理解,即我们距离原点的距离,设置100,将观察到如下图所示的影像
![](http://hi.csdn.net/attachment/201202/2/0_1328170065IrrQ.gif)
如果我们向前或向后移动,则相应的图像会变大或变小,这里其实就是运用了透视原理,近处的物体大,远处的物体小,实际物体的大小是不变的,同理改变center坐标(眼睛看去的那个点,可简单理解为视线的终点)也会影响球的大小,同样可以认为是改变了物体与观察点的距离所致,最后那个up坐标表示观察者本身的方向,如果将观察点比喻成我们的眼睛,那么这个up则表示我们是正立还是倒立异或某一个角度在看,所看的影像大不相同,故此时需要指明我们现在正立,那么X,Z轴为0,Y轴为正即可,通常将其设置为1,只要表示一个向上的向量(方向)即可,我们指定0.1f或0.00001f异或1000.0f,效果是一样的,只要能表示方向即可。
void 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()这个函数指定一个视图矩阵,一般在执行命令glMatrixMode(GL_MODELVIEW)和glLoadidentity()之后使用;该函数定义了视点矩阵,并用该矩阵乘以当前矩阵。eyex、eyey、eyez定义了视点的位置;centerx、centery和centerz变量指定了参考点的位置,该点通常为相机所瞄准的场景中心轴线上的点;upx、upy、upz变量指定了向上向量的方向。
通常,视点转换操作在模型转换操作之后发出,以便模型转换先对物体发生作用。场景中物体的顶点经过模型转换之后移动到所希望的位置,然后再对场景进行视点定位等操作。模型转换和视点转换共同构成模型视景矩阵。
这个函数是对模型矩阵进行变换(GL_MODELVIEW),而gluPerspective函数是对投影矩阵进行变换(GL_PROJECTION),这一点一定要搞清楚。在实际应用时,可以用gluPerspective函数设置近平面、远平面。
透视原理:
我们知道,远处的东西看起来要小一些,近处的东西看起来会大一些,这就是透视原理,如下图所示
![](http://hi.csdn.net/attachment/201202/2/0_1328168721Iv1L.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/30/3122477d2ffb19c4284caacddb796be2.gif)
假设那两条线表示公路,理论上讲,它们的两条边是平行的, 但现实情况中,它们在远方(可以无限远)总要相交于一点,实际线段AB的长度=CD的长度,只是在此例中使用了透视角,故会有如上的效果,是不是很接近现实的情况?
结合gluLookAt()这个命令:
它共接受三对坐标, 分别为eye,center,up,
eye: 表示我们眼睛在"世界坐标系"中的位置,
center:表示眼睛"看"的那个点的坐标,
up: 表示观察者本身的方向,如果将观察点比喻成我们的眼睛,那么这个up则表示我们是正立还是倒立异或某一个角度在看,所看的影像大不相同,故此时需要指明我们现在正立,那么X,Z轴为0,Y轴为正即可,通常将其设置为1,只要表示一个向上的向量(方向)即可。
球是画在世界坐标系的原点上的,即O(0,0,0)坐标上,我们的眼睛位于观察点A(0,0,100),Z轴向屏幕里看去的方向为负,屏幕外我们的位置,Z轴为正值,其实很好理解,即我们距离原点的距离,设置100,将观察到如下图所示的影像
![](http://hi.csdn.net/attachment/201202/2/0_1328170065IrrQ.gif)
如果我们向前或向后移动,则相应的图像会变大或变小,这里其实就是运用了透视原理,近处的物体大,远处的物体小,实际物体的大小是不变的,同理改变center坐标(眼睛看去的那个点,可简单理解为视线的终点)也会影响球的大小,同样可以认为是改变了物体与观察点的距离所致,最后那个up坐标表示观察者本身的方向,如果将观察点比喻成我们的眼睛,那么这个up则表示我们是正立还是倒立异或某一个角度在看,所看的影像大不相同,故此时需要指明我们现在正立,那么X,Z轴为0,Y轴为正即可,通常将其设置为1,只要表示一个向上的向量(方向)即可,我们指定0.1f或0.00001f异或1000.0f,效果是一样的,只要能表示方向即可。
相关文章推荐
- OpenGL函数思考-gluLookAt
- OpenGL函数思考-gluLookAt
- 【转】OpenGL 函数 gluLookAt() glScalef() glTranslatef() glRotatef() glFrustum() glPerspective() 的使用
- OpenGL 函数 gluLookAt() glScalef() glTranslatef() glRotatef() glFrustum() glPerspective() 的使用
- OpenGL织梦之旅【第四章】第1节.设置视点函数gluLookAt
- OpenGL 函数 gluLookAt() glScalef() glTranslatef() glRotatef() glFrustum() glPerspective() 的使用
- Opengl---gluLookAt函数详解
- OpenGL 函数 gluLookAt() glScalef() glTranslatef() glRotatef() glFrustum() glPerspective() 的使用
- OpenGL之gluLookAt()函数
- OpenGL: gluLookAt函数详解
- 小白学opengl之gluLookAt函数例子
- OpenGL 函数 gluLookAt() glScalef() glTranslatef() glRotatef() glFrustum() glPerspective() 的使用
- Opengl---gluLookAt函数详解
- Opengl---gluLookAt函数详解
- Opengl---gluLookAt函数详解
- OpenGL 函数 gluLookAt() glScalef() glTranslatef() glRotatef() glFrustum() glPerspective() 的使用
- OpenGL 函数 gluLookAt() glScalef() glTranslatef() glRotatef() glFrustum() glPerspective() 的使用
- Opengl---gluLookAt函数详解
- OpenGL的gluLookAt观察变换函数详解
- OpenGL 函数 gluLookAt() glScalef() glTranslatef() glRotatef() glFrustum() glPerspective() 的使用