OSG+VC中实现飞行尾迹透明度渐变

       程序要实现飞行轨迹透明度渐变的效果。

代码如下:

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::

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值