osgViewer.Renderer 是 OpenSceneGraph 的渲染引擎。它支持多个渲染接口,包括 OpenGL、DirectX 和 Vulkan,使得 OpenSceneGraph 可以在多种平台上运行。
osg::ref_ptr<osgViewer::Renderer>
:指向 osgViewer.Renderer 对象的智能指针类型。Renderer(const char* name = "Viewer", bool useSRGB = true)
:构造一个 osgViewer.Renderer 对象,name 参数为渲染窗口的名称,useSRGB 为是否开启 sRGB 色彩空间纠正。virtual void setSceneData(osg::Node* node)
:设置渲染场景的根节点。virtual void setCamera(osg::Camera* camera)
:设置渲染时使用的相机。virtual bool frame() = 0
:渲染一帧图像,并返回是否成功。virtual bool render() = 0
:执行渲染操作,并返回是否成功。virtual void setThreadingModel(ThreadingModel threadingModel)
:设置渲染引擎的多线程模式,可选值包括 SingleThreaded、CullDrawThreadPerContext、DrawThreadPerContext。virtual ThreadingModel getThreadingModel() const
:获取当前渲染引擎的多线程模式。void setClearColor(const osg::Vec4& color)
:设置渲染窗口的清屏颜色。const osg::Vec4& getClearColor() const
:获取当前渲染窗口的清屏颜色。void setDisplaySettings(osg::DisplaySettings* ds)
:设置渲染窗口的显示参数。osg::DisplaySettings* getDisplaySettings() const
:获取当前渲染窗口的显示参数。下面是一个使用 osgViewer.Renderer 渲染场景的示例:
#include <osgViewer/Viewer>
#include <osgViewer/Renderer>
int main()
{
osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;
osg::ref_ptr<osgViewer::Renderer> renderer = viewer->getRenderer();
osg::ref_ptr<osg::Group> root = new osg::Group;
root->addChild(osgDB::readNodeFile("cow.osg"));
osg::ref_ptr<osg::Camera> camera = new osg::Camera;
camera->setClearMask(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
camera->setClearColor(osg::Vec4(1, 1, 1, 1));
camera->setProjectionMatrixAsPerspective(30, 1, 1, 1000);
renderer->setSceneData(root);
renderer->setCamera(camera);
while (!viewer->done())
{
renderer->frame();
}
return 0;
}
在上述代码中,我们首先获取了 osgViewer.Renderer 对象,然后构造了一个场景图,设置了相机参数,以及清屏颜色等信息。最后,在主循环中通过调用 frame()
函数来不断渲染场景。