void Viewer::updateTraversal()
{//主相机
if (_camera.valid() && _camera->getUpdateCallback()) _camera->accept(*_updateVisitor);
//从相机
for(unsigned int i=0; i<getNumSlaves(); ++i)
{ osg::Camera* camera = getSlave(i)._camera.get();
if (camera && camera->getUpdateCallback()) camera->accept(*_updateVisitor);
}
//主相机
if (_cameraManipulator.valid())
{ ……
_camera->setViewMatrix(_cameraManipulator->getInverseMatrix());
}
//从相机
updateSlaves();
}
void RenderStage::draw(osg::RenderInfo& renderInfo,RenderLeaf*& previous)
{
drawPreRenderStages(renderInfo,previous);
if (_camera && _camera->getPreDrawCallback())
{
// if we have a camera with a pre draw callback invoke it.
(*(_camera->getPreDrawCallback()))(renderInfo);
}
glFlush();
if (_camera && _camera->getPostDrawCallback())
{
// if we have a camera with a post draw callback invoke it.
&nbs

本文详细介绍了OSG(OpenSceneGraph)中的图形绘制过程,包括Viewer的更新遍历、RenderStage的绘制阶段以及不同Drawable的实现方法。内容涵盖了主相机和从相机的更新回调、渲染阶段的预处理和后处理回调、以及自定义几何体如Teapot的绘制。同时,还讲解了如何在OSG中绘制文字和形状,如Box的绘制方法。
最低0.47元/天 解锁文章
487

被折叠的 条评论
为什么被折叠?



