OpenGL笔记:四. 视图变换

来源:互联网 发布:ccs软件功能 编辑:程序博客网 时间:2024/05/17 01:49

View

摘要:对于OpenGL初学者来说,往往会遇到视角不对,或者观察不到要绘制得图形。这些问题都是由于对OpenGL视图变换不理解造成的,只有完全理解了OpenGL的视图变换才能进一步学习OpenGL,否者你会处处遇到问题而不知其原因。

1. Introduction

      这一部分内容是OpenGL中最难理解,也是最重要的一章。对于初学者来说,经常会遇到,运行程序的时候看不到任何东西,其中可能的原因是你没有把物体放入一个合适的观察点。也就是说,物体存在,但是你看不到。

2.  视图变换, 模型变换

    必须先把glMatrixMode() 设为: GL_MODEVIEW, 然后,用glLoadIdentity() 置为单位阵。
    在全局固定坐标系中, 变换矩阵的相乘顺序与它们在代码中的顺序相反。
        如: A * ( B* (C * V) ): A, B, C 与V相乘的顺序为C,B,A
    为了解决此问题,采用局部坐标系。
        原理:在全局坐标系中设置一个局部坐标系coord, 移动物体obj时,coord随着obj一起移动, 之后的操作在局部坐标系coord内进行。

    (1)模型变换——作用于物体本身

        移动:glTranslate*(), 

        旋转:glRotate*(),

        伸缩:glScale*()
        

    (2)视图变换 —— 作用于观察点

        gluLookat( x1,y1,z1,  x2,y2,z2,  upx, upy, upz )
        (x1,y1,z1) : eye
        ( x2,y2,z2): 参考点——视线上的一点。
        (upx, upy, upz):观察方向,这个不好理解,做好是自己动手试试。

3. 投影变换

    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    

    (1) glFrustum( left, right, bottom, top, near, far );

    (2) glOrtho(left, right, bottom, top, near, far)

    left表示视景体左面的坐标,right表示右面的坐标,bottom表示下面的,top表示上面的。

    glOrtho是创建一个正交平行的视景体。 一般用于物体不会因为离屏幕的远近而产生大小的变换的情况。比如,常用的工程中的制图等。需要比较精确的显示。 而作为它的对立情况, glFrustum则产生一个透视投影。这是一种模拟真是生活中,人们视野观测物体的真实情况。例如:观察两条平行的火车到,在过了很远之后,这两条铁轨是会相交于一处的。还有,离眼睛近的物体看起来大一些,远的物体看起来小一些。

    (3) glPerspective( a, w/h, near, far )

4. 视口变换

    (1)视口定义
        glViewPort(x, y, w, h);
    (2)glDepthRange( near, far );

5. 矩阵操作

    对当前矩阵(栈顶矩阵)的操作:
    glLoadMatrix();
    glLoadTransposeMatrix();
    
    glMultMatrix();
    glMultTransposeMatrix();
    
    glLoadIdentity();
    
    对堆栈的操作:
    glPushMatrix();
    glPopMatrix();