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这个函数, 因为它同时会将三个变量都配置好!
     




  • 相关阅读:
    flash使用lua
    如何写出兼容大部分浏览器的CSS 代码
    typeof 详解
    人月神话阅读笔记(三)
    人月神话阅读笔记(二)
    仓库物资管理
    动手动脑(四)
    人月神话阅读笔记(一)
    动手动脑(六 文件操作)及课后作业
    java异常处理
  • 原文地址:https://www.cnblogs.com/chaoswong/p/3411957.html
Copyright © 2011-2022 走看看