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




  • 相关阅读:
    《数据结构》树与二叉树
    C/C++ 一点笔记(1)
    c#中隐藏基类方法的作用
    VS2010 灵活运用快捷操作功能(新手必看)
    C# 之类复制 MemberwiseClone与Clone(深 浅 Clone)
    DLL笔记
    批处理文件
    .NET Remoting(一)
    MSI安装数据库
    关于用户角色权限的一点想法(RBAC)
  • 原文地址:https://www.cnblogs.com/chaoswong/p/3411957.html
Copyright © 2011-2022 走看看