osgViewer.ViewerBase
是 OpenSceneGraph
的核心视图基类之一。它定义了 osgViewer
实现中所有视图的共同行为,并提供了交互、渲染和事件处理等功能。
osg::Referenced
osgViewer::ViewerBase
osgViewer::CompositeViewer
osgViewer::Viewer
osgViewer::View
osgViewer.ViewerBase
是一个抽象类,定义了许多基本方法,以支持视图类的功能。这些方法包括:
frame()
:这个方法在 osgViewer::ViewerBase
中定义,它在每个场景帧中被调用,触发渲染、事件处理和更新逻辑。eventTraversal()
:这个方法在事件处理中被调用,触发与 OpenSceneGraph
相关的事件处理。updateTraversal()
:这个方法在 update
中被调用,用于更新场景图信息。renderingTraversals()
:这个方法在渲染时被调用,用于渲染场景图信息。此外,osgViewer.ViewerBase
还提供了许多其他功能,用于控制视窗的大小、位置、交互、多视图等。
osgViewer.ViewerBase
是一个抽象类,不能直接实例化。但是,它的派生类可以重载构造函数以便初始化其成员变量。
以下是 osgViewer.ViewerBase
中的一些常用成员函数:
addView(osgViewer::View* view)
:将视图添加到 osgViewer::ViewerBase
实例中。setThreadingModel(osgViewer::ViewerBase::ThreadingModel threadingModel)
:设置应用程序的线程模型。setSceneData(osg::Node* node)
:设置场景数据,将要展示在视图中的场景节点。osgViewer.ViewerBase
提供不同的线程模型,以支持不同的应用场景。其中常用的有以下几种:
osgUtil::CullVisitor
进行场景裁剪和节点排列,将任务分配给 OpenGL 上下文线程来执行。默认情况下,osgViewer.ViewerBase
使用 SingleThreaded
的线程模型。
osgViewer.ViewerBase
可以与多种输入设备集成,包括:
用户自定义输入设备也可以与 osgViewer.ViewerBase
集成。
osgViewer.ViewerBase
提供了内置的事件处理功能,通过 osgGA::GUIEventHandler
类来实现。开发人员可以创建自定义的事件处理器,用于处理鼠标、键盘、触摸屏等不同的输入事件。
在渲染阶段,每帧 osgViewer.ViewerBase
会遍历输入场景图,将视景体裁剪后交给 OpenGL 渲染。其中包括以下渲染相关的类:
osgViewer::GraphicsWindow
:描述函数和上下文之间的抽象接口。osgViewer::Renderer
:为每个视图提供 render 方法,以实现在视口中绘制场景的渲染逻辑。osgViewer::Scene
:存储场景数据并提供必要的场景信息, 包括深度清除、帧前后调度等。osgViewer.ViewerBase
支持多视窗模式,在一个主窗口内添加多个子窗口,每个子窗口可以有自己的独立视角、相机和场景信息。同时,多窗口支持也允许使用多个 OpenGL 上下文、多个线程和不同的渲染速度。多视窗支持可以通过使用 osgViewer.Viewer
或 osgViewer.CompositeViewer
实现。
osgViewer.ViewerBase
是 OpenSceneGraph
的核心视图基类之一,为视窗应用程序提供了统一的行为规范,且提供了多种线程模型、输入设备、事件处理及绘制等功能,为视窗的创建提供了便捷的开发体验。同时,多视窗支持也使得我们可以创建窗口多样化的应用程序。