查看: 956|回复: 0

使用NodeVisitor进行模型顶点更新心得

[复制链接]

该用户从未签到

发表于 2016-5-19 15:59:52 | 显示全部楼层 |阅读模式
写一个类,该类实现将模型顶点的高程放大为原来两倍的功能,代码如下:
class modelvertices: public osg::NodeCallback
{
        modelvertices::modelvertices(void)
   
{
         osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN);
}


modelvertices::~modelvertices(void)
{
}

void modelvertices::apply( osg::Geode& geode )
{
        for (unsigned int i=0;i<geode.getNumDrawables();++i)
        {
                osg::Geometry* geom=dynamic_cast<osg::Geometry*>(geode.getDrawable(i));
                if(!geom)
                        continue;
                osg::Vec3Array* verts=dynamic_cast<osg::Vec3Array*>(geom->getVertexArray());
                if(!verts)
                        continue;
                osg::Vec3Array* verts2=new osg::Vec3Array;
                for (osg::Vec3Array::iterator iter=verts->begin();iter!=verts->end();iter++)
                {
                        //std::cout<<iter->x()<<" "<<iter->y()<<" "<<iter->z()<<std::endl;
                        iter->z()=iter->z()*2;//高程放大为原来两倍
                        osg::Vec3 aa=*iter;
                        verts2->push_back(aa);
                }
                geom->setVertexArray(verts2);
                geom->addPrimitiveSet(new osg:rawArrays(osg:rimitiveSet::POINTS,0,verts2->size()));//注意,该处不能使用setPrimitiveSet()函数
        }
}
};
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表