摘要: 一. 空间变换节点空间变换中最重要的是坐标系和矩阵运算了。OSG坐标系中使用右手系,Z轴垂直向上,X轴水平向右,Y轴垂直屏幕向里,与OpenGL和DirectX都不同。相关缩放、旋转和平移主要由osg::Matrix, osg::Vec3, osg::Quat几个类来完成。局部坐标系向世界坐标系转换规则是:设在局部坐标系下顶点 V 转换成世界坐标系坐标 V':    V' = V * Mn* Mn-1*……* M3* M2* M1* M0其中M0到Mn一次为各个矩阵变换。从世界坐标系坐标下顶点 V' 转换成局部坐标系 V:    V = V' * M0-1 * M1-1 * M2-1 * M3 阅读全文
posted @ 2010-12-26 02:11 adyzng 阅读(6041) 评论(0) 推荐(1) 编辑
摘要: OpenSceneGraph的源码是使用标准C++格式编码的,故而OSG的头文件都没有.h后缀。而在VS2008中,除了标准库中的标准C++头文件能够很好的支持外,其他不带.h的标准头文件,VS2008的支持显然不够,只能以文本形式打开,其中关键字,语法等都不能自动识别,无法高亮显示,对于读源码来说是非常的不方便。既然标准库中的C++头文件能识别,对于其他标准头文件也应该能支持。解决方法如下:打开注册表(regedit),如果装过Visual Studio 2008的话,找到:在该注册表项下可以看到VS所支持的所有C++标准头文件。所以只要我们把OSG的所有头文件添加到该项之下,就可以得到VS 阅读全文
posted @ 2010-12-21 17:00 adyzng 阅读(1790) 评论(0) 推荐(0) 编辑
摘要: 一. OSG组件OSG 运行时文件由一系列动态链接库(或共享对象)和可执行文件组成。这些链接库可分为以下五大类:1. OSG 核心库。 2. NodeKits。3. OSG 插件。 4. 互操作库。5. 不断扩展中的程序和示例集。二. OSG核心库 OSG 核心库提供了用于场景图形操作的核心场景图形功能、类和方法;主要包含一下四个链接库: 1. osg库:osg 库包含了用于构建场景图形的场景图形节点类,用作向量和矩阵运算的类,几何体类,以及用于描述和管理渲染状态的类。2. osgUtil库:osg工具库包括的类和函数,可以用于场景图形及其内容的操作,场景图形数据统计和优化,以及渲染器的创建。 阅读全文
posted @ 2010-12-21 01:36 adyzng 阅读(5696) 评论(0) 推荐(3) 编辑
摘要: OSG中的节点主要使用回调(CallBack)来完成用户临时、需要每帧执行的工作。根据回调功能被调用的时机划分为更新回调(UpdateCallBack)和人机交互时间回调(Event CallBack)。前者在每一帧中系统遍历到当前节点时调用,后者则由交互事件触发,如操作键盘、鼠标、关闭窗口、改变窗口大小等动作。回调类基类是osg::NodeCallBack(),主要函数如下:节点类中完成回调函数设置和获取:对于addNestedCallback(……)函数,其源码如下:在NodeCallback类中用一个ref_ptrNodeCallback _nestedCallback; 来存储下一 阅读全文
posted @ 2010-12-19 01:47 adyzng 阅读(8021) 评论(0) 推荐(3) 编辑
摘要: 节点访问:    OSG中节点的访问使用的是一种访问器模式。一个典型的访问器涉及抽象访问者角色(Visitor), 具体访问者(Concrete Visitor), 节点角色(Node)。OSG中访问者角色为NodeVisitor类,其基本结构如下:  NodeVisitor(TraversalMode tm) //构造函数,TraversalMode为节点树的遍历方式                   //TRAVERSE_NONE, 仅当前节点                   //TRAVERSE_PARENTS, 向当前节点的父节点遍历                   //TR 阅读全文
posted @ 2010-12-17 02:54 adyzng 阅读(8132) 评论(0) 推荐(2) 编辑
摘要: 1. BVH树OpenSceneGraph中采用包围体层次(Bounding Volume Hierarchy, BVH)来实现场景图形的管理,“包围体”是指将一组物体完全封闭在一个简单空间形体中。OSG中使用的包围体有包围球(Bounding Sphere)和包围盒(Bounding Box)。 2. 节点OSG的场景结构树是一棵有向无环图 (Directed Acyclic Graph),可以多个父节点共享一个子节点。 节点主要分三类:根节点,枝节节点,叶子节点。OSG使用Node类表达一个基本节点,也是所有类型场景节点的基类。3. 叶节点Geode(Geometry Node) 主要保存 阅读全文
posted @ 2010-12-17 00:33 adyzng 阅读(4998) 评论(0) 推荐(2) 编辑
摘要: 之前转过一篇关于OSG中ref_ptr管理内存的文章,现再自己补充一些。  1. 从只能指针中获取原始指针的方法有:  osg::ref_ptrosg::Geode geodePtr = new osg::Geode();  osg::Geode* obj1 = *geodePtr; //获取Geode指针  osg::Geode* obj2 = geodePtr.get();//获取Geode指针2.下面代码存在性能问题  while(1)  {    osg::ref_ptrosg::Geode geodePtr = new osg::Geode ;  }  智能指针只存在whil 阅读全文
posted @ 2010-12-16 23:58 adyzng 阅读(2607) 评论(1) 推荐(0) 编辑
摘要: 原文:http://www.lxzhu.com/blog/archives/251  在Osg中有一个类被使用的最多,那就是ref_ptr,OSG中提供了一种自动管理内存的机制,这种机制涉及到两个类:第一个就是ref_ptr,另外一个就是osg::Referenced.  osg::Reference支持通过引用计数的方式来控制自己的生命周期,它期望,每次被一个新客户引用的时候,新客户能给他添加引用计数;而当客户不需要再使用它的时候,希望客户能够减少引用计数.如果引用计数达到0,那么osg::Reference就会析构自己,释放内存.但是这个过程对客户要求比较高,谁能记得住每次都添加引用和减少 阅读全文
posted @ 2010-12-16 17:14 adyzng 阅读(856) 评论(0) 推荐(0) 编辑