博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[osg][原]自定义osgGA漫游器
阅读量:6974 次
发布时间:2019-06-27

本文共 965 字,大约阅读时间需要 3 分钟。

相机矩阵变化基础:

osg漫游器原理:

osgGA::CameraManpulator原理:

 

 简单的说osgGA::CameraManipulator就是用来修改相机节点姿态的。

关于osg相机的默认姿态:

 

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

 

转载地址:http://rxesl.baihongyu.com/

你可能感兴趣的文章
[转]简单介绍如何使用robotium进行自动化测试
查看>>
post和get的区别?
查看>>
android 滚动视图(ScrollView)
查看>>
无限级别菜单下拉
查看>>
Linux oprofile命令
查看>>
HashMap 实现原理(复习)
查看>>
Leetcode: LFU Cache && Summary of various Sets: HashSet, TreeSet, LinkedHashSet
查看>>
JAVA数据结构--队列
查看>>
[zz]配置RHEL6使用CentOS6的yum源
查看>>
linux debug : addr2line追踪出错地址
查看>>
oracle 好书( 09 对象管理 )
查看>>
网站是否有播放音乐功能
查看>>
架构设计:远程调用服务架构设计及zookeeper技术详解(上篇)
查看>>
web开发中的 emmet 效率提升工具
查看>>
41、java与mysql乱码的问题
查看>>
细说 Form (表单)
查看>>
在Web应用和IntelliJ IDEA中使用Spring框架
查看>>
用缓动函数模拟物理动画
查看>>
MongoDB索引相关文章-摘自网络
查看>>
RBAC权限设计图 [转]
查看>>