OSG绘制空间凹多边形以及透明效果的实现

我们知道,OSG中用来绘制多边形的绘图基元是osg::PrimitiveSet::POLYGON。但是仅仅靠这个绘图基元无法绘制出凹多边形,经过资料查找,发现了绘制凹多边形的方法和思路,不多废话,直接上代码。

凹多边形的实现:

    //绘制环形
	//两个半径参数
	float radius1 = 1800.0;
	float radius2 = 1350.0;
	osg::ref_ptr<osg::Geometry>geom_AirArea_part2 = new osg::Geometry;

	osg::ref_ptr<osg::Vec3Array> airLine_area_part2 = new osg::Vec3Array;
    
    //添加绘制顶点
	for (float i = 0; i <= 314; i += 0.5)
	{
		airLine_area_part2->push_back(osg::Vec3((radius1 * cos(i / 100) - radius1 + bias_x + 250.0)*3.7, (10305.0 - bias_y + radius1 * sin(i / 100))*3.7, (400.0 - i / 3.14)*3.7));
	}

	for (float i = 314; i >= 0; i -= 0.5)
	{
		airLine_area_part2->push_back(osg::Vec3((radius2 * cos(i / 100) - radius2 + bias_x - 250.0)*3.7, (10305.0 - bias_y + radius2 * sin(i / 100))*3.7, (400.0 - i / 3.14)*3.7));
	}

	geom_AirArea_part2-&g
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 OpenSceneGraph 中,可以使用 `osg::Geometry` 类来绘制曲线。 以下是一个简单的示例代码,用于绘制一条二次贝塞尔曲线: ``` osg::ref_ptr<osg::Vec3Array> vertices = new osg::Vec3Array; vertices->push_back(osg::Vec3(0, 0, 0)); // 起点 vertices->push_back(osg::Vec3(1, 2, 0)); // 控制点 vertices->push_back(osg::Vec3(2, 0, 0)); // 终点 osg::ref_ptr<osg::Geometry> geom = new osg::Geometry; geom->setVertexArray(vertices); osg::ref_ptr<osg::Vec4Array> colors = new osg::Vec4Array; colors->push_back(osg::Vec4(1.0, 1.0, 1.0, 1.0)); // 曲线颜色 geom->setColorArray(colors); geom->setColorBinding(osg::Geometry::BIND_OVERALL); osg::ref_ptr<osg::DrawArrays> drawArrays = new osg::DrawArrays(osg::PrimitiveSet::LINE_STRIP, 0, 100); geom->addPrimitiveSet(drawArrays); osg::ref_ptr<osg::Geode> geode = new osg::Geode; geode->addDrawable(geom); osgViewer::Viewer viewer; viewer.setSceneData(geode); viewer.realize(); viewer.run(); ``` 在这个示例中,我们首先创建了包含曲线顶点的 `osg::Vec3Array` 对象,然后将其设置为几何体的顶点数组。接着,我们创建了一个 `osg::Vec4Array` 对象来设置曲线的颜色,并将其绑定到几何体上。最后,我们创建了一个 `osg::DrawArrays` 对象来设置绘制方式,并将其添加到几何体的原语集合中。最后,我们将几何体添加到 `osg::Geode` 中,并将其设置为场景图的根节点。 你可以根据需要修改这个示例代码来绘制不同类型的曲线。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值