osgTerrain.ContourLayer
是 OpenSceneGraph 中的一个类,用于在地形场景中添加等高线层。
osgTerrain.ContourLayer
类是基于 osgTerrain.TerrainLayer
类的一个子类,它使用一个高程图层来生成等高线。等高线可以是固定的或动态的,它可以被用来美化地形场景并提供更丰富的层次感。
osgTerrain.ContourLayer
类常常被用作 osgTerrain.Terrain
类的一个子节点。当 osgTerrain.Terrain
类被设置定制化时,可以添加一个或多个 osgTerrain.ContourLayer
实例来生成等高线。
osg::ref_ptr<osgTerrain.Terrain> terrain = new osgTerrain.Terrain();
osg::ref_ptr<osgTerrain.ContourLayer> contourLayer = new osgTerrain.ContourLayer();
terrain->addChild(contourLayer);
osgTerrain.ContourLayer
类具有添加等高线的能力。可以通过 setContourLevels()
方法来设置等高线级别:
osg::ref_ptr<osgTerrain.ContourLayer> contourLayer = new osgTerrain.ContourLayer();
contourLayer->setContourLevels(osgTerrain.ContourLayer::ELEVATION_CONTOURS, 5, 100, 10); // 第1个参数:绘制方式;第2个参数:起始高程;第3个参数:结束高程;第4个参数:高程间隔
osgTerrain.ContourLayer
类还可以设置等高线级别的颜色、宽度等属性:
osg::ref_ptr<osgTerrain.ContourLayer> contourLayer = new osgTerrain.ContourLayer();
contourLayer->setContourLineSettings(2, osg::Vec4(1.0f, 1.0f, 1.0f, 1.0f), 10.0f); // 第1个参数:宽度;第2个参数:颜色;第3个参数:混合因子
以下代码示例创建了一个平面网格,然后添加了等高线层。
osg::ref_ptr<osg::Vec3Array> vertices = new osg::Vec3Array(4);
(*vertices)[0].set(0.0f, 0.0f, 0.0f);
(*vertices)[1].set(10.0f, 0.0f, 0.0f);
(*vertices)[2].set(10.0f, 10.0f, 0.0f);
(*vertices)[3].set(0.0f, 10.0f, 0.0f);
osg::ref_ptr<osg::DrawElementsUInt> indices = new osg::DrawElementsUInt(GL_TRIANGLES, 6);
(*indices)[0] = 0; (*indices)[1] = 1; (*indices)[2] = 2;
(*indices)[3] = 0; (*indices)[4] = 2; (*indices)[5] = 3;
osg::ref_ptr<osg::Geometry> geometry = new osg::Geometry();
geometry->setVertexArray(vertices);
geometry->addPrimitiveSet(indices);
osg::ref_ptr<osgTerrain::ContourLayer> contour_layer = new osgTerrain::ContourLayer();
contour_layer->setContourLevels(osgTerrain::ContourLayer::ELEVATION_CONTOURS, 0, 10, 1);
contour_layer->setContourLineSettings(2, osg::Vec4(1.0f, 1.0f, 1.0f, 1.0f), 10.0f);
osg::ref_ptr<osgTerrain::Terrain> terrain = new osgTerrain::Terrain();
terrain->addChild(geometry);
terrain->addChild(contour_layer);
osgViewer::Viewer viewer;
viewer.setSceneData(terrain);
viewer.run();