做了个读取3维文件模型的小程序,由于模型大小不一,显示的时候有的看不全,有的很小,经常需要手动调整。
请问有没有什么方法可以根据模型的大小及位置调整视口,使显示大小和中心都适中?

解决方案 »

  1.   

    详细点就要把图形学的书都搬过来了~~~// 设置模形矩阵
    void SetModalMatrix( void )
    {
        glMatrixMode( GL_MODELVIEW );
        glLoadIdentity( ); // 单位化矩阵
    // 这个函数是在OnIdle里被调用的,所以我们用下面的代码来实现物体的旋转
    // 一个很容易理解的概念是,你绕着物体转和物体自己转在某些简单场景里的
    // 的效果看起来是一样的,所以我们通过矩阵运算让眼睛点在一定高度做圆周
    // 运动。知道圆的简化方程是:(sinα* r)^2 + (cosα* r)^2 = r^2,所以代码
    // 很好理解。    static float fRadius = 0;
        fRadius += 0.01f;
        if ( fRadius > M_PI * 2 )
        {
            fRadius = 0;
        }
        gluLookAt( cosf( fRadius ) * 30, sinf( fRadius ) * 30, 15.0,
            0.0, 0.0, 0.0, // 向原点坐标看去
            0.0, 0.0, 1.0 ); // 设置眼睛(摄影机)的方向向量,该向量表示眼表向上
    }// 设置透视矩阵
    void SetProjMatrix( WORD wWidth, WORD wHeight )
    {
        // 此函数将在WM_SIZE时被调用,所以应该设置一下glViewPort
        glViewport( 0, 0, wWidth, wHeight );
        glMatrixMode( GL_PROJECTION );
        glLoadIdentity( );
        // 这和照象机很类似,第一个参数设置镜头广角度,第二个参数是长宽比,后面是远近剪切。
        gluPerspective( 45.0, (double)wWidth / (double)wHeight, 1.0, 1000.0 );
    }
      

  2.   

    用gluLookat函数,得根据你的坐标值设定;
    http://community.csdn.net/Expert/topic/3143/3143497.xml?temp=.8713953