程序要实现飞行轨迹透明度渐变的效果。
代码如下:
geom_single->setColorArray(vec_Color_gradualColor);
geom_single->setColorBinding(osg::Geometry::BIND_PER_VERTEX);
geom_single->setVertexArray(array_pos_track);
if ( (m_height > 1) && state_Play)
{
unsigned int num = m_currentCount * 2 - 30;
geom_single->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::QUAD_STRIP, num, 200));
geode_single->addDrawable(geom_single);
osg::ref_ptr<osg::StateSet>stateset = geode_single->getOrCreateStateSet();
//Alpha混合开启
stateset->setMode(GL_BLEND, osg::StateAttribute::ON);
//取消深度测试
stateset->setMode(GL_DEPTH_TEST, osg::StateAttribute::ON);
//获取flightpath下叶节点的数目,清除之前的叶节点,为添加新的叶节点做准备
node_num = node_flightpath->getNumChildren();
if (node_num > 0)
node_flightpath->removeChildren(0, node_num);
node_flightpath->addChild(geode_single);
}
// 初始化vec_Color_gradualColor颜色数组
for (int n = 0; n < 100;n++)
{
float value = n;
if (value>50)
{
value = 50;
}
vec_Color_gradualColor->push_back(osg::Vec4(1.0f, 0.498f, 0.094f, 0.0f + 0.02*value));
vec_Color_gradualColor->push_back(osg::Vec4(1.0f, 0.498f, 0.094f, 0.0f + 0.02*value));
}
图1
如上图1所示,飞行轨迹的数组中共包含608140个数据点。
按照OSG图元的绘制方式,先后对geom_single进行了设置。运行程序,程序在绘制图元的开始抛出异常,具体情况如下图2/3所示:
图2
图3
最后,问题定位在下面这行代码:
geom_single->addPrimitiveSet(new osg::