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




  • 相关阅读:
    OpenGL入门1.3:着色器 GLSL
    OpenGL入门1.2:渲染管线简介,画三角形
    C++回调,函数指针
    JavaScript 比较和逻辑运算符
    JS 运算符
    JS 函数
    JS 对象
    JS 数据类型
    JS 变量
    JS 注释
  • 原文地址:https://www.cnblogs.com/chaoswong/p/3411957.html
Copyright © 2011-2022 走看看