osg 学习 1
来源:互联网 发布:兴业证券 炒股软件 编辑:程序博客网 时间:2024/06/02 09:18
Open Scene Graphics 开放场景开发api。
资源: 论坛 中英文主页 osg程序设计教程 , osg quick start(in chinese), virtual car simulator(csdn download)
翻了一遍书,有个整体感觉。没有opengl的开发经验,很模糊。看car simulator也算清楚,自己写估计又不行。这里记录几个常用类的方法:
viewer类,提供窗口。
- realize 初始化过程
-run 渲染,(不允许每帧都改变视口)
- getcamera
- setCameraManipulator, 视口操作,指定viewer camera
viewbase基类方法:
- setstate 渲染参数
- setEventVisitor, getEventVistor, 事件遍历器
- setUpdateVisitor, getUpdateVisitor
node类,场景中基本单元。
- accept 全遍历 (参数 node visitor)
-ascend 向上遍历
-traverse 向下遍历
-setUpdateCallback, getUpdateCallback 更新回调
- setEventCallback, getEventCallback
- setStateSet getOrCreateStateSet 渲染参数
- BoundSphere 相交测试类函数
MatrixTransfrom类
- setMatrix, 添加一个matrix操作
- getMatrix,
- getInverseMatrix
Geode 叶节点类,不能再有子结点,但可添加drawable类
- addDrawable
- boundingbox 包围盒计算
-- 事件监听 + 响应(交互)
scene数据都put到viewer对象里,然后对scene中某个节点对象进行监听-响应,通过对viewer添加addEventHandler方法(事件处理器方法),与root节点引用遍历访问子节点的思想一致。
一般过程是,继承一个osgGA::GUIEventHandler子类,重载其中handle方法
GUIEventHandler类
- operator 向下遍历node
- handle 封装监听-响应
--- 上述 GUIEventHandler有一个特殊的子类,即事件响应是viewer的视角变化,这涉及操作viewer的camera,对于场景漫游等非常游泳,故定义了一个单独的新类
OSG::CameraManipulator 继承 OSG::GUIEventHandler.
--- 上述“ 事件监听-响应”过程,具体对“响应”的实现在回调函数中。Event/UpdateCallback
======= 动态更改
osgviewer 支持多线程,每个线程独立允许拣选,绘制。出于性能考虑,没有线程锁设计。那么就要求所有动态数据更改,必须在拣选,绘制的时间之外。
ERROR: 程序崩溃,往往就是用户在拣选,绘制过程改变了场景数据。
方法1: 设置data variance, static状态的对象是不需要完成更新就可以返回的;dynamic状态对象,必须在完成更新厚才能返回。
方法2: node更新/拣选回调。回调实际就是在更改节点数据
继承NodeCallback类,重载operator(Node&, NodeVisitor& ) 方法,使用setUpdateCallback 关联到node
----- 节点遍历 NodeVisitor
- OSG学习笔记1:OSG环境编译
- osg 学习 1
- osg学习
- OSG学习
- OSG OpenThreads 线程学习(1)
- 2015-0826-osg学习历程1
- OSG学习:裁剪变换(1)
- OSG学习 osg概述以及学习方法等
- OSG学习笔记01:OSG的安装
- osg学习之一:基础
- 开始学习OSG
- OSG学习笔记
- OSG 路径动画学习
- 开始学习OSG
- OSG学习二
- osg 反走样学习
- osg学习博客
- osg 四元数学习
- C++查缺补漏之异常(续)
- Delphi三层网络架构代码实现
- 工作总结第十七天
- (二)Logistic Regression[逻辑回归]&正则项
- 多项式相加之延伸:让类的设计更彻底些
- osg 学习 1
- 作业P51-6
- poj1735
- Bootstrap起步
- String Reversion powered by wangbin
- Greenplum中客户端接口和程序
- Socket Server: TCP 多线程版
- 对C++中指针安全性的理解
- REDIS教程{1}windows 下安装redis并测试(-)