• 投影变换与视口变换


    一些说明:

    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 );

  • 相关阅读:
    Elasticsearch Query DSL 整理总结(三)—— Match Phrase Query 和 Match Phrase Prefix Query
    Elasticsearch Query DSL 整理总结(二)—— 要搞懂 Match Query,看这篇就够了
    Elasticsearch Query DSL 整理总结(一)—— Query DSL 概要,MatchAllQuery,全文查询简述
    Elasticsearch Java Rest Client API 整理总结 (三)——Building Queries
    Elasticsearch date 类型详解
    python 历险记(五)— python 中的模块
    python 历险记(四)— python 中常用的 json 操作
    python 历险记(三)— python 的常用文件操作
    Elasticsearch Java Rest Client API 整理总结 (二) —— SearchAPI
    Elasticsearch Java Rest Client API 整理总结 (一)——Document API
  • 原文地址:https://www.cnblogs.com/kekec/p/1791413.html
Copyright © 2020-2023  润新知