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




转载于:https://www.cnblogs.com/chaoswong/p/3411957.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值