介绍
在使用OpenGL时,涉及到透视函数以及视角的概念,初学时一脸懵逼,下面介绍下函数的概念以及用法。
函数
glMatrixMode( GLenum mode );
glLoadIdentity( void );
gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar);
gluLookAt(GLdouble eyeX, GLdouble eyeY, GLdouble eyeZ, GLdouble centerX, GLdouble centerY, GLdouble centerZ, GLdouble upX, GLdouble upY, GLdouble upZ);
解析
1、glMatrixMode( GLenum mode ); 指定乘以的矩阵类型。
glMatrixMode有3种模式:
GL_PROJECTION 投影,
GL_MODELVIEW 模型视图,
GL_TEXTURE 纹理.
通俗理解,我要改变模型本身时,就使用变换矩阵,我要改变看模型的方式时,就使用投影矩阵
2、glLoadIdentity( void ); 把矩阵设为单位矩阵。
个人理解,无论是改变透视还是改变模型,其实内部都是用一组矩阵乘以变换矩阵,但是为了不改变原来矩阵的大小,需要设置为单位阵。
3、gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar);
这个透视函数gluPerspective(),通俗解释就是为我们指定了一个四棱台,只有你想要观测的模型包含在四棱台体内部,才能在屏幕上投影。如上图所示,四棱台有四个参数:fovy,aspect,zNear,zFar。fovy设定了从台顶部到台底部的角度,角度越大,视野越大。aspect设定了四棱台截面的长宽比。zNear和zFar设定了四棱台的台顶和台底所在的位置。
4、gluLookAt(GLdouble eyeX, GLdouble eyeY, GLdouble eyeZ, GLdouble centerX, GLdouble centerY, GLdouble centerZ, GLdouble upX, GLdouble upY, GLdouble upZ);
函数gluLookAt()制定了观察者所在位置,也就是上图相机的位置。函数有九个参数,分别指明了:眼睛位置(eyeX,eyeY,eyeZ),目标位置(centerX,centerY,centerZ),头顶朝向(upX,upY,upZ)。
举例说明
1、QT源代码
void Widget::initGL()
{
glClearColor(0.0,0.0,0.0,0.0); //设置默认颜色
glShadeModel(GL_SMOOTH); //设置过渡模式
glClearDepth(1.0); //设置深度
glEnable(GL_DEPTH_TEST); //开启深度模式
}
void Widget::resizeGL(int w, int h)
{
glViewport(0,0,(GLint)w,(GLint)h); //设置视觉窗口
glMatrixMode(GL_PROJECTION); //设置模式
glLoadIdentity(); //设置为单位阵
gluPerspective(45,(GLfloat)w/(GLfloat)h,1,100); //设置透视模型
}
void Widget::paintGL()
{