osgUtil::DelaunayTriangulator 类进行模型有限元三角网格划分

osgUtil::DelaunayTriangulator类建立约束的delaunay(德洛内)三角网,delaunay(德洛内)三角网主要用于基于离散点数据构建三维表面。如经常用于构建地形表面。

1、生成离散点数据

2、三角化处理

3、将三角化的图元添加到叶节点中

osg::ref_ptr<osg::Geode> CreateModule_DelaunayTriangulator(osg::ref_ptr<osg::Vec3Array> Points, osg::ref_ptr<osg::Vec4Array>color)
{
     //DelaunayTriangulator
     osg::ref_ptr<osg::Geode> geode=new osg::Geode;

     osg::ref_ptr<osgUtil::DelaunayTriangulator> trig=new osgUtil::DelaunayTriangulator();
     trig->setInputPointArray(points);
     /** NB you need to supply a vec3 array for the triangulator to calculate normals into */
     osg::ref_ptr<osg::Vec3Array> norms=new osg::Vec3Array;
     trig->setOutputNormalArray(norms);
     trig->triangulate();//it will change the ordinary and maybe change the Size of point
    
     //Add color and Calculate the texture coordinates after triangulation as 
     //the points may get disordered by the triangulate function
     osg::ref_ptr<osg::Geometry> gm=new osg::Geometry;
     gm->setVertexArray(points); // points may have been modified in order by triangulation.
     //add color
     gm->setColorArray(color);//set color
     gm->setColorBinding(osg::Geometry::BIND_OVERALL);

     gm->addPrimitiveSet(trig->getTriangles());
     gm->setNormalArray(trig->getOutputNormalArray());
     gm->setNormalBinding(osg::Geometry::BIND_PER_PRIMITIVE);
     geode->addDrawable(gm.get());

     // use smoothing visitor to set the average normals
     osgUtil::SmoothingVisitor sv;
     sv.apply(*geode);
     return geode;
}

 

参考文章:https://www.cnblogs.com/flylong0204/p/4616195.html

                  https://blog.csdn.net/hudfang/article/details/46544453

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醉逍遥_祥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值