osgViewer.SingleScreen
是 OpenSceneGraph(OSG)类库中的一种查看器器件,它封装了基于单个窗口的场景渲染和交互功能。该类适用于Windows、Mac OS X和Linux操作系统。
该类提供了以下主要功能:
osgViewer::SingleScreen::SingleScreen(osg::Arguments& arguments)
该函数以osg::Arguments
对象作为参数,并创建一个osgViewer::SingleScreen
对象。
setUpViewInWindow(int x, int y, int width, int height)
void osgViewer::SingleScreen::setUpViewInWindow(int x, int y, int width, int height)
将该查看器的视图设置到指定的矩形区域内。
x
和y
是左上角的位置。width
和height
是矩形的宽度和高度。setSceneData(osg::Node* node)
void osgViewer::SingleScreen::setSceneData(osg::Node* node)
设置在该查看器中渲染的场景图。
run()
void osgViewer::SingleScreen::run()
运行该查看器,并开始渲染场景。该函数将启动渲染循环,渲染并显示每一帧,直到用户主动关闭窗口或按下ESC键退出。
getViewerStats()
osgViewer::ViewerStats* osgViewer::SingleScreen::getViewerStats()
获取该查看器的统计信息。
setThreadingModel(osgViewer::ViewerBase::ThreadingModel threadingModel)
void osgViewer::SingleScreen::setThreadingModel(osgViewer::ViewerBase::ThreadingModel threadingModel)
设置场景渲染时的线程模型。
THREAD_SINGLE
表示使用单个线程。THREAD_PER_CONTEXT
表示使用一个线程为每个图形上下文。THREAD_PER_DRAWABLE
表示使用一个线程为每个可绘制对象。THREAD_PER_CAMERA
表示使用一个线程为每个相机。setKeyEventSetsDone(int value)
void osgViewer::SingleScreen::setKeyEventSetsDone(int value)
设置键盘事件的处理方式。默认情况下,若用户按下ESC键,则关闭应用程序。
getCamera()
osg::Camera* osgViewer::SingleScreen::getCamera()
获取该查看器的相机。
getSceneData()
osg::Node* osgViewer::SingleScreen::getSceneData()
获取该查看器渲染的场景图。若未设置场景数据,则返回NULL
。
getDefaultWindowRect()
osg::GraphicsContext::Traits* osgViewer::SingleScreen::defaultTraits()
获取默认的窗口矩形。
getFrameStamp()
osg::FrameStamp* osgViewer::SingleScreen::getFrameStamp() const
获取该查看器的帧时间戳。
setClearColor(const osg::Vec4& color)
void osgViewer::SingleScreen::setClearColor(const osg::Vec4& color)
设置视图的背景颜色。传入参数为4维向量,其中每个元素的值范围在[0, 1]之间。
setStatsOnScreen(bool flag)
void osgViewer::SingleScreen::setStatsOnScreen(bool flag)
设置是否在屏幕上显示渲染统计信息。
setCameraManipulator(osgGA::CameraManipulator* manipulator)
void osgViewer::SingleScreen::setCameraManipulator(osgGA::CameraManipulator* manipulator)
设置相机控制器(即相机操纵器)。
以下代码演示了如何使用osgViewer::SingleScreen
查看器的基本用法:
#include <osgViewer/Viewer>
#include <osgViewer/ViewerEventHandlers>
#include <osgDB/ReadFile>
int main()
{
// 1. 初始化查看器并设置视口
osg::ArgumentParser arguments;
osgViewer::SingleScreen viewer(arguments);
viewer.setUpViewInWindow(100, 100, 800, 600);
// 2. 加载场景文件
osg::Node* model = osgDB::readNodeFile("cow.osgt");
if (!model)
{
osg::notify(osg::FATAL) << "未能加载模型文件." << std::endl;
return -1;
}
// 3. 设置相机控制器
viewer.setCameraManipulator(new osgGA::TrackballManipulator);
// 4. 设置场景数据并运行查看器
viewer.setSceneData(model);
return viewer.run();
}