zoukankan      html  css  js  c++  java
  • 投影变换与视口变换

    一些说明:

    0. 投影变换:描述如何指定视景体(viewing volume)的形状和方向。视口变换:解释如何控制三维模型坐标到屏幕坐标的变换。

    1. 无论是透视投影还是平行投影(正交投影),只有在视景体中的物体才可见。

    2. 下图为OpenGL默认视点位置

       (eyex,eyey,eyez) = (0.0,0.0,0.0); (upx,upy,upz) = (0.0,1.0,0.0) 指向z轴负半轴。

       (也可通过gluLookAt来指定)

    函数介绍:

    视点设置


    /* 该函数用于设置视点的位置,视点聚焦的位置,以及视点的向上方向 */

    // 令: v1(centerx-eyex, centery-eyey, centerz-eyez)  v2(upx, upy, upz)

    //      v3为v2在v1为法向量平面上的投影向量

    // 如果向量v1与v2平行,则该视点将看不到任何物体。【要避免这种情况】

    // v2并非是视点的向上方向,即也不是经过视口变换,投影到二维屏幕上图像的向上方向。

    // 视点的向上方向为v3。

    void gluLookAt( GLdouble eyex, GLdouble eyey, GLdouble eyez, 

      GLdouble centerx, GLdouble centery, GLdouble centerz, 

      GLdouble upx, GLdouble upy, GLdouble upz );


    透视投影(相机模型)

    /* 该函数用于创建对称透视四棱台视景体(该四棱台视景体上下面为相似的长方形,两长方形中心的连线为其高) */

    // fovy为竖直方向的视角(单位°),范围:(0,180),角度愈大,能看到的东西越多。为图中的∠MON

    //  aspect为宽高比PQ/MN(为一正数)

    //  zNear为视点到近裁截面的距离OA(为一正数)

    //  zFar为视点到远裁截面的距离OB(为一正数  OB>OA)

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


    /* 该函数用于创建透视四棱台视景体(该四棱台视景体上下面为相似的长方形,但两长方形中心的连线不一定为其高) */

    // P(left, top) T(right, bottom) Q(right, top) S(left, bottom)

    //  zNear为视点到近裁截面的距离(为一正数)

    //  zFar为视点到远裁截面的距离(为一正数  zFar>zNear)

    void glFrustum( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble znear, GLdouble zfar );


    平行投影


    /* 该函数用于创建平行投影视景体方盒 */

    // P(left, top) T(right, bottom) Q(right, top) S(left, bottom)

    // near,far为正表示在视点的前方,为负表示在视点的后方(这并不是说在视点前方的就会被显示,后方就不会显示)

    // 如:gluLookAt(0.0,0.0,1.0, 0.0,0.0,0.0, 0.0,1.0,0.0);  glOrtho(-10.0,10.0,-10.0,10.0,-7.0,9.0);

    // auxWireSphere(8.0); 该网格球才能被完整地显示(即整个球落在视景体之内)。


    void glOrtho( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far );


    视口变换


    /* 该函数用来指定进行视口变换时,屏幕原点和长宽值 */

    void glViewport( GLint x, GLint y, GLsizei width, GLsizei height );

  • 相关阅读:
    js禁止页面回退,刷新,右键代码
    asp.net网站中的Gridview循环判断数据是否被选中
    Gridview中同时选中并删除多个数据
    asp.net中在后台更换控件图片的代码
    关于gcd的8题
    flash AIR 通过BitmapData生成图片到android Camera相册
    flash AIR 通过BitmapData生成图片到本地
    C的随机数
    xcode svn设置事项
    拒绝session丢失 利用DIV层实现对模态窗口的模拟
  • 原文地址:https://www.cnblogs.com/kekec/p/1791413.html
Copyright © 2011-2022 走看看