• OSG学习过程中的笔记


    0、Geode Drawable Shape Geometry 

          http://blog.csdn.net/sunxiaoju/article/details/50220353

    1、osg库:

    Notify:osg库提供了一系列的控制调试,警告和错误输出的函数。用户可以通过指定一个来自notifyseveritu枚举量的数值,设定输出的信息量。

     osg::Camera    为视口添加camera的类。用于显示。

    osg::MatrixTransform  这时一个最常用的移动节点的类,可以随动、旋转控制节点。这些操作都是乘矩阵得到。 平移、缩放、旋转

    2、交运算osgUtil库:

    通过提供大量用于场景图形交运算,使用如下类可以获得场景图形中被拾取部分的信息:

    Intersector:纯虚类,定义了相交测试的接口。执行相交测试时,应用程序将继承自intersector的某个类实例化,传递给intersectionvisitor的实例,并随后请求该实例返回数据以获取交运算的结果。

    intersectionVisitor:搜索场景图形中与指定几何体相交的节点,而最后的测试工作由intersector继承类完成。

    lineSegmentIntersector:继承自intersector,用于检测指定线段和场景图形之间的相交的节点,并向程序提供查询相交测试结果的函数。

    PolytopeIntersector:与LineSegmentIntersector类似,该类用于检测由一系列平面构成的多面体的相交情况。当用户点击鼠标,希望拾取到鼠标位置附近的封闭多面体区域时,PolytopeIntersector有效

    PlaneIntersector:与LineSegmentIntersector类似,用于检测由一系列平面构成的平面相交情况

     

    3、漫游器

    漫游器是操作器中很重要的一种,实现自定义的操作器。osg自带的操作器是TrackBall。

    场景的核心管理器是viewer,而漫游时需要响应事件,如鼠标移动,场景也会随之变化,响应事件的类是osgGA::GUIEventHandler。需要从响应事件的类派生一个新类出来,这个类专门用于根据响应控制viewer。这个类就是osgGA::CameraManipulator,这个类有一些操作矩阵的公共接口,而viewer在渲染时又会去读取这些矩阵,通过操作变换矩阵,这些接口就可以有效控制viewer了。

    4、视景器

          视景器包括几个最主要的组件:漫游器_cameraManipulator,用于实现交互式的场景漫游;事件处理器组_eventHandlers,负责处理视景器的事件队列_eventQuene,主要是键盘鼠标事件的处理;场景_scene,它包括视景器所对应的场景图形根节点,以及用于提高节点和图像数据处理速度的两个分页数据库:摄像机_camera和_slaves,前者为场景的住摄像机,后者为从摄像机,不过OSG并没有规定一定要使用主摄像机来显示场景,它的更重要的作用是为OSG世界矩阵的计算提供依据。

          摄像机是OSG视图显示的核心器件,没有摄像机就没有办法将场景图形的实景展现给用户。它包括:

           1.视口(viewport),它指示了摄像机显示窗口的位置和尺寸。

           2.图形上下文(GraphicsContext),通常这就是平台相关的图形显示窗口(即GraphicsWindow,对于Win32系统而言,它实际是通过CreateWindowEx这个API创建的),不过也可能是离屛渲染的设备。

            3.渲染器(GraphicsOperation,更多时候是osgViewer::Renderer)这时整个OSG筛选(CULL)和绘制(DRAW)的关键。

    5、多视口的创建

            1、多相机创建多视口

            一个视景器,一个图形上下文,多个相机。

            2、多窗口创建多视口

             一个视景器,多个图形上下文,多个相机。每一个窗口都包含一个设备上下文。

             3、CompositeViewer创建多视口

        多个视景器,多个相机,一个图形上下文。很多程序的首选。不仅可以让数据在各个viewer之间方便的传递,也可以让各个viewer独立运作,每个viewer可以使用不同的操作器。

     6、强指针与弱指针

    OSG中有两种智能指针类型,ref_ptr(强)observer_ptr(弱)。observer_ptr指向一个对象,但它没有引用计数功能,仅仅记录该对象的地址,当该对象在其他地方被销毁后,通过observer_ptr获得对象地址将为空。

      7、osg中常用的事件类型枚举

    《三维视景仿真技术开发详解》P119     

  • 相关阅读:
    mysql主从同步图
    VS2010智能提示失效,关键字不智能提示!
    mvc3的SaveChanges()方法无效,数据并没有更新!
    使用uploadify上传插件时遇到 NetworkError: 403 Forbidden http://xxxx/xxxx/ 错误
    Asp.net 调用mysql存储过程参数传中文乱码!
    The entity type XXXInfo is not part of the model for the current context.
    爬取汽车网站汽车数据
    《牛顿和莱布尼兹对最速降落线问题的解法,少为人知》 回复
    《谁能证明:标准波面的光若能汇集于一点,则它们的光程长度必然相等》 回复
    200^199 和 199^200 哪个大 ?
  • 原文地址:https://www.cnblogs.com/hanmolabi/p/7820970.html
Copyright © 2020-2023  润新知