osgUtil.HighlightMapGenerator
是OpenSceneGraph的一个辅助工具类,用于生成高亮地图,在场景中标示出给定的几何体或模型。
osgUtil.HighlightMapGenerator
类可以生成指定几何体或模型的高亮地图,以区分该几何体或模型与其他物体。
该类提供两种高亮方式:
使用osgUtil.HighlightMapGenerator
生成高亮地图的步骤如下:
创建osgUtil.HighlightMapGenerator
实例
osg::ref_ptr<osgUtil::HighlightMapGenerator> highlightMapGenerator = new osgUtil::HighlightMapGenerator;
设置高亮方式
通过调用osgUtil.HighlightMapGenerator
类的setHighlightTechnique()
方法设置高亮方式。该方法有两个参数:
technique
:高亮方式,可以为osgUtil::HighlightMapGenerator::DEFAULT
、osgUtil::HighlightMapGenerator::USE_VERTEX_COLORS
、osgUtil::HighlightMapGenerator::USE_OBJECT_COLOR
、osgUtil::HighlightMapGenerator::USE_BOUNDING_BOX
、osgUtil::HighlightMapGenerator::USE_OBJECT_BOUNDING_BOX
、osgUtil::HighlightMapGenerator::USE_RENDER_BIN_DETAILS
、osgUtil::HighlightMapGenerator::USE_MATERIAL
、osgUtil::HighlightMapGenerator::USE_DISPLAY_LIST
useWireframe
:是否添加边框线,可以为true
或false
highlightMapGenerator->setHighlightTechnique(osgUtil::HighlightMapGenerator::USE_MATERIAL, true);
设置高亮颜色
通过调用osgUtil.HighlightMapGenerator
类的setHighlightColor()
方法设置高亮颜色。该方法有一个参数:
color
:要设置的高亮颜色,可以为osg::Vec4
类型
highlightMapGenerator->setHighlightColor(osg::Vec4(1.0, 1.0, 0.0, 1.0));
生成高亮地图
调用osgUtil.HighlightMapGenerator
类的generateHighlightMap()
方法生成高亮地图。该方法有一个参数:
scene
:要生成高亮地图的场景,可以为osg::Node
类型
osg::ref_ptr<osg::Node> scene = ...;
highlightMapGenerator->generateHighlightMap(scene);
应用高亮地图
要将高亮地图应用到场景中,必须对场景中的几何体或模型进行修改。建议将场景克隆一份进行修改,而不是直接修改原始场景。
修改几何体或模型的方法可以有多种,这里以添加Drawable为例:
// 使用颜色高亮
highlightMapGenerator->applyHighlightColorsToGeometry(geometry);
// 使用边框高亮
highlightMapGenerator->applyHighlightWireframeToGeometry(geometry);
#include <osg/Node>
#include <osg/Geode>
#include <osg/ShapeDrawable>
#include <osgViewer/Viewer>
#include <osgUtil/HighlightMapGenerator>
int main() {
// 创建场景
osg::ref_ptr<osg::Geode> geode = new osg::Geode;
geode->addDrawable(new osg::ShapeDrawable(new osg::Box));
osg::ref_ptr<osg::Group> scene = new osg::Group;
scene->addChild(geode);
// 创建高亮地图生成器
osg::ref_ptr<osgUtil::HighlightMapGenerator> highlightMapGenerator = new osgUtil::HighlightMapGenerator;
// 设置高亮方式
highlightMapGenerator->setHighlightTechnique(osgUtil::HighlightMapGenerator::USE_MATERIAL, true);
// 设置高亮颜色
highlightMapGenerator->setHighlightColor(osg::Vec4(1.0, 1.0, 0.0, 1.0));
// 生成高亮地图
highlightMapGenerator->generateHighlightMap(scene);
// 应用高亮地图
highlightMapGenerator->applyHighlightColorsToGeometry(geode);
highlightMapGenerator->applyHighlightWireframeToGeometry(geode);
// 显示场景
osgViewer::Viewer viewer;
viewer.setSceneData(scene);
return viewer.run();
}
osgUtil.HighlightMapGenerator
官方文档:https://github.com/openscenegraph/OpenSceneGraph/blob/master/include/osgUtil/HighlightMapGeneratorosgUtil.HighlightMapGenerator
源码:https://github.com/openscenegraph/OpenSceneGraph/blob/master/src/osgUtil/HighlightMapGenerator.cpp