osgViewer.ViewerBase 是 OpenSceneGraph 的核心视图基类之一。它定义了 osgViewer 实现中所有视图的共同行为,并提供了交互、渲染和事件处理等功能。
osg::Referenced
osgViewer::ViewerBase
osgViewer::CompositeViewerosgViewer::ViewerosgViewer::ViewosgViewer.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 的核心视图基类之一,为视窗应用程序提供了统一的行为规范,且提供了多种线程模型、输入设备、事件处理及绘制等功能,为视窗的创建提供了便捷的开发体验。同时,多视窗支持也使得我们可以创建窗口多样化的应用程序。