• !gluLookAt与glOrtho 参数解析


    void gluLookAt( GLdouble eyeX,

                    GLdouble eyeY,

                    GLdouble eyeZ,

                    GLdouble centerX,

                    GLdouble centerY,

                    GLdouble centerZ,

                    GLdouble upX,

                    GLdouble upY,

                    GLdouble upZ);

    中eye和center是用来确定看的方向,也就是说即使物体不落在eye和center这两点的范围内,也可以看到。

    因为用来确定范围的是另一个函数glOrtho,它的参数

    void glOrtho(  GLdouble        left,

                            GLdouble        right,

                            GLdouble        bottom,

                            GLdouble        top,

                            GLdouble        nearVal,

                            GLdouble        farVal);

    如果物体不落在这个范围内,那就会看不到。只看得到落在范围内的那一部分。

    因此glOrtho的参数可以通过物体的boundingbox来确定。他的left right bottom top near far是通过gluLookAt的eye 和center来确定,就是我看的方向然后上下左右前后 (mark:与坐标x,y,z是代表长宽高不是直接等价的)。

    PS: near必须离眼睛比较近,far必须离眼睛远。比如根据z来确定,那么near的z必须和eye的z 值更相近。

    //是相对于gluLookAt中eye的位置,znear是靠近eye的,eye是从正向向负向看center
    //znear与eye.z要比zfar与eye.z更近
    //有的building没有floor,如果znear和zfar包括的范围没有包裹整个building,那么从逆向向正向看,只有boundary
    //从正向向逆向看,就是fill mode,但是如果范围足够大,就不用担心这个问题。
    //这里也不会导致空白很大,图小

    参加getFootprint()函数.

    e.g., 

    double x,z;
    x = pLoadModels->g_3DModel->boundBox.max.x - pLoadModels->g_3DModel->boundBox.min.x;
    z = pLoadModels->g_3DModel->boundBox.max.z - pLoadModels->g_3DModel->boundBox.min.z;
    double normRadius = max(x,z) * 1.1; // correspond to model's extend 1.1 倍 circumcircle

    范围最好是比原来的扩大1.1,这样不管多大或者多小的模型,都能自动fit into viewport,就不会有的图很大很小或者看不到要手动调整。

     

  • 相关阅读:
    目标检测应用化之web页面(YOLO、SSD等)
    传统候选区域提取方法
    非极大值抑制(Non-Maximum Suppression,NMS)
    Darknet windows移植(YOLO v2)
    线性判别分析 LDA
    SVM 支持向量机
    特征-相似度衡量
    布隆过滤器 Bloom Filter
    聚类算法
    图论--最大流
  • 原文地址:https://www.cnblogs.com/qingsunny/p/4325555.html
Copyright © 2020-2023  润新知