• OpenGL函数解析之gluPerspective()


    函数原型:

    void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar);

    参数说明:

    fovy:指定视景体的视野的角度,以度数为单位,y轴的上下方向。

    aspect:指定视景体的宽高比(x平面上)。

    zNear:指定观察者到视景体的最近的裁剪面的距离。

    zFar:指定观察者到视景体的最远的裁剪面的距离。

    函数说明:

    gluPerspective()函数设置透视投影矩阵,一般在执行该函数glMatrixMode(GL_PROJECTION)和glLoadIdentity()之后使用。它指定了要观察的视景体在世界坐标系中的具体大小,一般而言,其中参数aspect应该与窗口的宽高比大小相同。比如说aspect = 2.0,表示在观察者的角度中物体的宽度是高度的两倍,在视口中的宽度也是高度的两倍,这样显示的物体才不会扭曲。

    由gluPerspective()产生的矩阵是当前矩阵与指定的矩阵相乘得到的,就好像是调用glMatrix()产生的矩阵是一样的。为使透视矩阵替代当前矩阵,在调用gluPerspective()之前要调用glLoadIdentity()函数,把当前矩阵重置为单位矩阵。

    透视原理:

    远处的东西看起来比近处的东西会小一些,这就是对透视原理很精简的阐释。

    举个例子:

    假设那两条线表示公路,理论上讲,它们的两边都是平行的。但是在实际情况中,从一头向远处(可以是无限远)看,两边总要相交于一点。实际上线段AB的长度和CD的长度是相等的,但是在图中使用了透视角,才会出现length(AB) > length(CD)。

  • 相关阅读:
    当你输入一个网址的时候,实际会发生什么?
    HTTP响应报文与工作原理详解
    DNS系统的解析原理
    spark-streaming集成Kafka处理实时数据
    python分布式环境下的限流器
    使用spark与MySQL进行数据交互的方法
    Linux Redis集群搭建与集群客户端实现
    commons-pool与commons-pool2连接池(Hadoop连接池)
    Kazoo Python Zookeeper 选主
    SpringMVC拦截器Interceptor
  • 原文地址:https://www.cnblogs.com/tgycoder/p/5223497.html
Copyright © 2020-2023  润新知