osgVolume.FixedFunctionTechnique是一个使用固定管线实现的OpenSceneGraph音量渲染技术。该技术支持数据集的实时体绘制和交互式体绘制。
osgVolume.FixedFunctionTechnique的渲染流程分别包括以下几个步骤:
osgVolume.FixedFunctionTechnique的渲染关键技术主要包括以下几个方面:
osgVolume.FixedFunctionTechnique提供众多参数供用户设置,包括:
osgVolume.FixedFunctionTechnique基于OpenSceneGraph的NodeVisitor实现,采用遍历场景图的方式对所有节点进行计算和渲染。主要的实现函数如下:
void FixedFunctionTechnique::apply(osg::Node& node)
{
if (false == _material.valid())
{
return;
}
if (dynamic_cast<osgVolume::Volume*>(node.asGroup()) == NULL)
{
traverse(node);
return;
}
startVolume(_volume = dynamic_cast<osgVolume::Volume*>(node.asGroup()));
_volume->drawGeometry(_renderInfoCache);
finishVolume();
}
在apply函数中,判断当前节点是否为osgVolume::Volume类型的节点,如果是的话,进行体渲染。
osgVolume.FixedFunctionTechnique的使用方法非常简单,只需设置体数据集和相关参数即可。具体步骤如下:
// 创建体节点
osg::ref_ptr<osgVolume::Volume> volumeNode = new osgVolume::Volume;
// 设置数据集
volumeNode->setVolumeData(volumeData);
// 设置渲染参数
osg::ref_ptr<osgVolume::FixedFunctionTechnique> technique = new osgVolume::FixedFunctionTechnique;
technique->setCurrentLight(light);
technique->setLightingEnabled(true);
technique->setMaterial(material);
volumeNode->setRenderTechnique(technique.get());