|
发表于 2013-1-7 10:30:25
|
显示全部楼层
- std::map<std::string,osg::ref_ptr<osg::MatrixTransform> > mapModels; //模型名称,矩阵变化节点
- osg::MatrixTransform* model = NULL;
- std::map<std::string,osg::ref_ptr<osg::MatrixTransform> >::const_iterator citer = mapModels.find("模型名称");
- if (citer == mapModels.end())
- {
- std::string fileName = "models\" + "模型名称" +".ive";
- osg::ref_ptr<osg::Node> node = osgDB::readNodeFile(fileName);
- if (!node)
- {
- std::cout<<"can not find model file: "<<fileName<<std::endl;
- continue;
- }
- osg::MatrixTransform* mat = dynamic_cast<osg::MatrixTransform*>(node.get());
- if (!mat)
- {
- mat = new osg::MatrixTransform;
- mat->addChild(node.get());
- }
- mapModels["模型名称"] = mat;
- model = mat;
- }
- else
- {
- model = mapModels["模型名称"].get();
- }
- osg::MatrixTransform* mat = new osg::MatrixTransform(*model);
- std::map<std::string,osg::Group*> m_mapResult; //模型名称,模型组节点
- std::map<std::string,osg::Group*>::iterator iter = m_mapResult.find("模型名称");
- if (iter == m_mapResult.end())
- {
- osg::Group* group = new osg::Group;
- m_mapResult["模型名称"] = group;
- }
- mat->setMatrix(osg::Matrix::scale(xScale,yScale,zScale) * osg::Matrix::rotate(angle,osg::Z_AXIS) * osg::Matrix::translate(postion)));
- mat->setName("模型名称");
- (m_mapResult["模型名称"])->addChild(mat);
复制代码 恩 这是我的方法 用个map 保存模型的节点就是咯 同名模型就只需要加载一次咯 |
|