wordpress 多站点 无法访问,c2c网站网址,友情链接翻译,手机写网页推荐内容
关于示例项目解析的内容推荐#xff1a;
OSG3.4内置Examples解析【目录】 下面是个人学习笔记。
1. Examples osgbillboard
这个项目很简单#xff0c;就几个函数#xff0c;而且很有意思。 osg::Billboard类是一个控制器#xff0c;不管你怎么旋转漫游场景
OSG3.4内置Examples解析【目录】 下面是个人学习笔记。
1. Examples osgbillboard
这个项目很简单就几个函数而且很有意思。 osg::Billboard类是一个控制器不管你怎么旋转漫游场景它始终都会朝向摄像机。
1.1 运行 1.2 调试、阅读代码
看里面代码时就会接触到osg的核心类了比如
- osg::Geometry
- osg::Vec3Array
- osg::StateSet
- osg::Group
- osgViewer::Viewer
- 等等这里面的类又会引用到其他类慢慢展开但是大体上都是属于 OSG Core/osg 项目中的内容也就是osg核心类。 关于OpenThreads
值得提及的是OSG Core文件夹下第一个项目是OpenThreads如下图所示 这个库比较有名它是一个多线程库关于OpenThreads不难可以参考我的另外一篇文章
【开源库学习】OpenThreads 接下来要了解以下一些类 OSG Core/osg/DeleteHandlerOSG Core/osg/ReferencedOSG Core/osg/ObjectOSG Core/osg/ref_ptrOSG Core/osg/ObserverOSG Core/osg/NodeOSG Core/osg/DrawableOSG Core/osg/GeometryOSG Core/osg/BufferObjectOSG Core/osg/BufferDataOSG Core/osg/Array更多的相关内容可以打开项目下的更多依赖项查看。 关于引用计数 理解共享指针和对象自带引用计数的区别。std::shared_ptr类似于Qt中的QSharedPointer而osg::ref_ptrReferenced类似于QSharedDataPointerQSharedData。 其他
The safe bool idiom in C
有些地方看不懂没关系最起码要知道某个类在哪个项目中主要功能是什么。不用着急见多了用多了自然就记住并理解了。
2. Examples osgtext
之所以选择这个项目是因为这个项目一看名字就知道它是一个在3D场景中绘制文本的示例项目。 文本绘制对我们来说接触的比较多应该比较容易理解。
2.1 运行 这个项目中包含2D平面的文本显示和3D模式的文本显示按下几次空格键可以查看3D文本。
多次按下字母’s’可以查看OSG实时运行参数统计信息。如下图所示
2.2 调试、阅读代码
整个项目大概800行大概花一两个小时就可以大致过一遍。调试的时候可以尝试注释、修改部分代码查看修改后的效果理解被修改的代码起到的作用。
下面是我的阅读总结 osg::Geode和osg::Geometry区别是osg::Geode继承自osg::Group可以包含多个子节点osg::Geometry和osg::Group都继承自osg::Node但是osg::Geometry不可以包含子节点只是一个独立节点。 osg::StateSet此类封装了OpenGL状态参数实现对OpenGL参数的集中管理封装成类更方便使用。 参数解析器osg::ArgumentParser arguments(argc, argv); 模型读写osgDB::writeNodeFile 创建相机并配置osg::Camera osgViewer 它是OSG核心的一部分位于OSG Core/osgViewer用来渲染3D场景并处理交互事件。 给视图设置模型osgViewer::Viewer::setSceneData()参数为3D场景根节点。 osgViewer::addEventHandler给视图添加事件处理器。osgViewer::StatsHandler统计数据显示类也是继承自osgGA::GUIEventHandler事件驱动统计。按下’s’显示OSG实时运行参数的统计信息就是由这个类实现的。 osgViewer::ViewerBase这个类集成了整个osg渲染过程需要特别关注。仔细阅读其代码 osgGA 这个项目位于OSG Core/osgViewer是OSG核心的一部分。 它实现了事件通知机制定义了响应3D场景中各种事件的回调接口。大概有25个类不多值得花点时间看看。 osgGA::EventHandler事件处理基类里面有一些遍历的代码不太好懂。理解它唯一的方法是调试。打上断点对着当前这个例子调试就完事了osgGA::GUIEventHandler是osgGA::EventHandler的子类通过调试理解。osgGA::StateSetManipulator是osgGA::GUIEventHandler的子类通过调试理解。osgGA::EventVisitor继承自osg::NodeVisitor也还是包含遍历的代码通过调试理解。osgGA::StateSetManipulator此类顾名思义是用于实现用户操作osg::StateSet的它通过响应用户输入修改场景或节点的渲染状态比如按下字母’l’控制场景灯光按下字母’t’切换纹理按下字母‘w’切换显示模式。按照这个套路其他的自己慢慢摸索 关于多线程渲染部分的代码要学习一下。 主要需要关注下面两个类。 osg::Operationosg::OperationThread 多线程渲染的原理是使用后台线程绘制然后主线程在帧刷新时同步绘制。 好了差不多就打住才看了两个例子有些类是看不懂的没必要继续深入了看下一个例子吧