zoukankan      html  css  js  c++  java
  • osg中的视点控制

    osg中的视点控制

    osg的视点控制基类是CameraManipulator, 它是一个虚基类, 有用的方法都跟home有关.
    在这个类里面有三个重要的成员变量:
    osg::Vec3d _homeEye
    osg::Vec3d _homeCenter
    osg::Vec3d _homeUp
     
    这三个变量定义了初始相机的位置.
     
    我们最常用的TrackballManipulator类其实没有定义什么, 它的主要方法都在基类OrbitManipulator里.
    这个类里重要的函数是setTransformation, 这个函数里设置了另外三个变量:
    osg::Vec3d _center;
    osg::Quat  _rotation;
    double     _distance;
     
    大部分的相机类都是从OrbitManipulator这个类派生出来的, 也就是说相机的位置最终是由上面三个新变量来控制的!
    而osg框架是通过下面这个函数来设置OpenGL中的相机位置的:
    osg::Matrixd OrbitManipulator::getMatrix() const
    {
        return osg::Matrixd::translate( 0., 0., _distance ) *
               osg::Matrixd::rotate( _rotation ) *
               osg::Matrixd::translate( _center );
    }
    通过这个函数我们可以看到这三个变量在矩阵中的作用.
     
    所以在手动设置相机位置的时候, 一定要注意三个值都要设置, 否则会在设置后出现一些奇怪的现象, 如旋转时中心点位置不对等.
    而且在手动设置的时候也推荐用setTransformation这个函数, 因为它同时会将三个变量都配置好!
     




  • 相关阅读:
    随机小错2_0527
    随计小错
    C++实现读写文件
    03-树2 List Leaves (25 分)
    获取毫秒级的时间戳
    new对象时,类名后加括号与不加括号的区别
    FoxMail 7.2的邮件存储目录修改
    C/C++ 开源算法库
    VS2015的安装
    脏内存导致BUG的问题
  • 原文地址:https://www.cnblogs.com/chaoswong/p/3411957.html
Copyright © 2011-2022 走看看