OpenGL笔记--透视函数应用及解析(基于QT)

介绍

  在使用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()
{
   
    
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值