OSG基本几何体的透明效果和网格模型

        使用OSG中自定义的基本几何体,并设置其透明的效果和网格模型,以圆锥为例。

首先创建圆锥:

	osg::ref_ptr<osg::Geode> geode=new osg::Geode;

	//生成圆锥
	m_pCone=new osg::Cone;

	m_pCone->setHeight(30);
	m_pCone->setRadius(30);

	osg::ref_ptr<osg::ShapeDrawable> shap=new osg::ShapeDrawable(m_pCone);

	//第四个参数0.25表示不透明度,0表示完全透明,1表示完全不透明
	shap->setColor(osg::Vec4(0.4,0.8,0.4,0.25));
	geode->addDrawable(shap);


        接下来设置透明效果和网格模型:

	//设置几何体透明效果
	osg::ref_ptr<osg::StateSet> stateset=geode->getOrCreateStateSet();
	stateset->setMode(GL_BLEND,osg::StateAttribute::ON);
	
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在OpenSceneGraph中,可以使用`osg::Geometry`类的`addPrimitiveSet()`方法将多个几何体合并成一个。以下是合并两个几何体的示例代码: ``` // 创建第一个几何体 osg::ref_ptr<osg::Geometry> geom1 = createGeometry1(); // 创建第二个几何体 osg::ref_ptr<osg::Geometry> geom2 = createGeometry2(); // 将第二个几何体的顶点和索引添加到第一个几何体osg::ref_ptr<osg::Vec3Array> vertices = dynamic_cast<osg::Vec3Array*>(geom1->getVertexArray()); vertices->reserve(vertices->size() + geom2->getVertexArray()->getNumElements()); vertices->insert(vertices->end(), geom2->getVertexArray()->begin(), geom2->getVertexArray()->end()); for (unsigned int i = 0; i < geom2->getNumPrimitiveSets(); ++i) { osg::ref_ptr<osg::PrimitiveSet> primset = geom2->getPrimitiveSet(i)->clone(osg::CopyOp::DEEP_COPY_ALL); primset->offsetIndices(vertices->size()); geom1->addPrimitiveSet(primset); } ``` 在上述代码中,首先创建了两个几何体`geom1`和`geom2`,每个几何体包含顶点坐标和索引信息。然后,将第二个几何体的顶点和索引添加到第一个几何体中。这里使用了`osg::Vec3Array`类来存储顶点坐标,通过`reserve()`方法预分配空间,然后使用`insert()`方法将第二个几何体的顶点坐标添加到第一个几何体中。接着,遍历第二个几何体中的所有基元集合,并使用`clone()`方法创建一个新的基元集合,通过`offsetIndices()`方法设置新的索引偏移量,最后使用`addPrimitiveSet()`方法将新的基元集合添加到第一个几何体中。这样,就可以将两个几何体合并成一个了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值