[osg][原]自定义osgGA漫游器
相机矩阵变化基础:http://blog.csdn.net/popy007/article/details/5120158
osg漫游器原理:http://blog.csdn.net/csxiaoshui/article/details/51295591
osgGA::CameraManpulator原理:http://blog.csdn.net/csxiaoshui/article/details/51303086
简单的说osgGA::CameraManipulator就是用来修改相机节点姿态的。
关于osg相机的默认姿态:http://www.cnblogs.com/lyggqm/p/8073688.html
osg一帧的绘制中会经历 事件遍历、更新遍历、渲染这三个过程。
事件遍历处理完其他事件回调后会调用漫游器的handle()函数
更新遍历处理完其他更新回调后会调用漫游器的updateCamera()函数
也就是说需要自定义漫游器最重要的两个重写函数是:
//事件处理,按键,鼠标交互处理
bool handle(const GUIEventAdapter& ea,GUIActionAdapter& us);
//更新当前帧的摄像机(通常由viewer调用)
//默认实现只需设置摄像机视图矩阵。
virtual void updateCamera(osg::Camera& camera);
而 updateCamera() 一般也不会重写,而是重写getInverseMatrix()
//所有漫游器都必须实现的4个纯虚函数
virtual void setByMatrix(const osg::Matrixd& matrix){} //设置相机的位置姿态矩阵
virtual void setByInverseMatrix(const osg::Matrixd& matrix){} //设置相机的视图矩阵
virtual osg::Matrixd getMatrix() const{return osg::Matrix();} //获取相机的姿态矩阵
virtual osg::Matrixd getInverseMatrix() const; //获取相机的视图矩阵
一般重写getInverseMatrix()。 因为这个函数返回的矩阵在updateCamera中使用:
virtual void updateCamera(osg::Camera& camera) { camera.setViewMatrix(getInverseMatrix()); }
所以,自定义函数最重要的两个重写函数是:
handle 和 getInverseMatrix
[osg][原]自定义osgGA漫游器的更多相关文章
- [osg][osgEarth][原]基于OE自定义自由飞行漫游器(初级版)
由于受够了OE的漫游器,想搞个可以在全球飞行的漫游器,所以就做了一个: 请无视我的起名规则······ 类头文件:EarthWalkManipulator.h #pragma once //南水之源 ...
- [osg][osgEarth][原]基于OE自定义自由飞行漫游器(第二版)
在初级版上,进行新的漫游方式调整 头文件: #pragma once //南水之源 20180101 #include <osgGA/CameraManipulator> #include ...
- [osg][osgEarth][osgGA][原] EarthManipulator------基于oe的相机漫游器(浅析)
知识基础:osg漫游器基础 class OSGEARTHUTIL_EXPORT EarthManipulator : public osgGA::CameraManipulator EarthMani ...
- [原][osg][osgEarth]EarthManipulator关于oe漫游器的handle部分解读以及修改(仿照谷歌,修改oe漫游器中focal(视角切换)功能 续 二)
bool EarthManipulator::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa) ...
- [原][osgEarth]添加自由飞行漫游器
//头文件里 #define MANIPULATOR_W 0x01#define MANIPULATOR_A 0x02#define MANIPULATOR_S 0x04#define MANIPUL ...
- [osgearth][原]仿照谷歌,修改oe漫游器中focal(视角切换)功能
oe中的视角加速感觉好奇怪,就仿照谷歌方式去改了. 先看看oe原来的漫游器改变视角的接口: void CameraManipulator::setViewpoint(const Viewpoint&a ...
- win2008以上的系统,在vmware esxi5.5里怎么使用自定义规范管理器?sysprep
经过测试,原来08以上的系统自带了sysprep.exe,所以vcenter对08以上的系统直接使用自定义规范管理器即可,跟linux一样了.注意不要跟03一样写入了sn即可. vCenter可使用s ...
- SpringMVC 自定义一个拦截器
自定义一个拦截器方法,实现HandlerInterceptor方法 public class FirstInterceptor implements HandlerInterceptor{ /** * ...
- 使用VideoView自定义一个播放器控件
介绍 最近要使用播放器做一个简单的视频播放功能,开始学习VideoView,在横竖屏切换的时候碰到了点麻烦,不过在查阅资料后总算是解决了.在写VideoView播放视频时候定义控制的代码全写在Actv ...
随机推荐
- JavaScript笔记 #06# Promise简单例子
索引 回调版本 Promise版本1 Promise版本2 Notes 参考资料: Promise JavaScript Promise:简介 你去书店借书,按照异步的套路,剧情如下↓ 你:“老板,有 ...
- mysql5.5被django抛弃,安装mysql5.7记录
安装: https://www.jb51.net/article/123004.htm 问题解决: https://blog.csdn.net/zztingfeng/article/details/8 ...
- oracle orion hugepages_settings.sh(支持OEL 7,4.1内核)
orion需要首先配置hugepage,否则会出现下列错误. [root@yyxxdb01 ~]# /opt/app/11.2.0/grid_home/bin/orion -run oltp -tes ...
- Java快捷键与搜狗输入法快键的冲突
搜狗五笔,简繁体转换快捷键 ctrl+shift+F Java编辑器 格式化 Ctrl+Shift+F 搜狗输入法 搜狗词典 Ctrl+/ Java编辑器 取消注释 Ctrl+/ Java编辑器 注释 ...
- Android之电话拨号和短信
拨打电话号码,需要添加权限设置,在安装的应用程序信息中可以看到此权限信息Intent doSth=new Intent();//意图:你想做什么呢?doSth.setAction(Intent.ACT ...
- EXP7 网络欺诈技术防范(修改版)
实践内容 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法. 1.简单应用SET工具建立冒名网站 2.ettercap DNS spoof 3.结合应用两种技术,用DNS s ...
- poj 3744 Scout (Another) YYF I - 概率与期望 - 动态规划 - 矩阵快速幂
(Another) YYF is a couragous scout. Now he is on a dangerous mission which is to penetrate into th ...
- ubuntu+anaconda+tensorflow 及相关问题
配置tensorflow部分参考:https://blog.csdn.net/XUTIAN1129/article/details/78997633 装完anaconda, source ~/.bas ...
- GDPR
http://column.caijing.com.cn/20180523/4457753.shtml
- Python logging 模块学习
logging example Level When it's used Numeric value DEBUG Detailed information, typically of interest ...