|
问题:
我想显示一些点,不同的点对应不同的Geode。代码如下:
osgViewer::Viewer viewer;
osg::ref_ptr<osg::Group> root=new osg::Group;
while (mysqlpp::Row row = res.fetch_row())//总共有2089个点
{
string str=row["astext(pts)"];
std::vector<pointSQL> pointvec;//存点的容器vector
pointstringtopoint(str,pointvec);//类型转换(字符串转换为double)
std::vector<pointSQL>::iterator it,itend=pointvec.end();
for(it=pointvec.begin();it<itend;it++)
{
osg::ref_ptr<osg::Geode> pointGeode=new osg::Geode();
osg::ref_ptr<osg::Geometry> pointGeometry=new osg::Geometry();
osg::ref_ptr<osg::Vec3Array> pointVer=new osg::Vec3Array;
pointVer->push_back(osg::Vec3(it->x,it->y,0));
pointGeometry->setVertexArray(pointVer.get());
osg::ref_ptr<osg::Vec4Array> color=new osg::Vec4Array;
pointGeometry->setColorArray(color.get());
pointGeometry->setColorBinding(osg::Geometry::BIND_PER_VERTEX);
color->push_back(osg::Vec4(1.,0.,0.,1.));
pointGeometry->addPrimitiveSet(new osg:: DrawArrays(osg:: PrimitiveSet:: POINTS,0,1));
pointGeode->addDrawable(pointGeometry.get());
root->addChild(pointGeode.get());
}
}
bool success = osgDB::writeNodeFile(*(root.get()),"test.osg");
viewer.setSceneData(root.get());
viewer.run();
经过调试发现root确实有2089个孩子结点。但运行程序后,点不显示。生成的文本文件test.osg见附件。
将该程序稍做改动:把所有的点都放到一个Geode,运行程序后,点能正常显示。
请大家指点一下,谢谢。
[ 本帖最后由 csu_zjh 于 2008-7-14 12:39 编辑 ] |
-
-
test.rar
19.21 KB, 下载次数: 104, 下载积分: 威望 1
|