Hi, Guys, I have a pick problem. What I want to do is loading 10 points with their loactions and colors. I want to use poly pick, and use another color to show the picked points. The loading points process is as follows:
Code: osg::ref_ptr<osg::Geometry> geom = new osg::Geometry(); osg::ref_ptr<osg::Vec3Array> v = new osg::Vec3Array; osg::ref_ptr<osg::Vec4Array> clr = new osg::Vec4Array; v->push_back(osg::Vec3(0.0, 0.0, 0.0)); ... // 10 points in total clr->push_back(osg::Vec4(1.0, 0.0, 1.0, 1.0f)); ...// set the color geom->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::POINTS, 0, v->size())); // after set the color and normal, add the geometry to Geode node geode->addDrawable(geom.get()); Then I want to use ploy pick, the problem is : when I put the following codes in the pick() function in Pickhandler class, I found out that the color of the picked premitiveset has been changed, however, nothing changed in the view window. The following codes are in pick function: Code: if (picker->containsIntersections()) { osgUtil::PolytopeIntersector::Intersections intersections = picker->getIntersections(); osgUtil::PolytopeIntersector::Intersections::iterator iter; for (iter = intersections.begin(); iter != intersections.end(); iter++) { osg::NodePath nodepath = (*iter).nodePath; node = (nodepath.size() >= 1) ? nodepath[nodepath.size() - 1] : 0; int pointIndex = (*iter).primitiveIndex; osg::Geode * geode = dynamic_cast<osg::Geode*> (node); osg::Geometry * geom = dynamic_cast<osg::Geometry*>(geode->getDrawable(0)); osg::Vec4Array * clrary = dynamic_cast<osg::Vec4Array*>(geom->getColorArray()); clrary->operator [] (pointIndex) = osg::Vec4(0.0, 1.0, 0.0, 1.0f); geom->setColorBinding(osg::Geometry::BIND_PER_VERTEX); node->addUpdateCallback(new CessnaCallback()); // not helpful viewer->updateTraversal(); //not helpful //viewer->run();//not helpful } } First, I thought may be the colors have not been changed, so I tested changing several points' color in the main function, like this: Code: osg::Geode * geode1 = dynamic_cast<osg::Geode*> (nodePt.get()); osg::Geometry * geom = dynamic_cast<osg::Geometry*>(geode1->getDrawable(0)); osg::Vec4Array * clrary = dynamic_cast<osg::Vec4Array*>(geom->getColorArray()); clrary->operator [] (10) = osg::Vec4(0.0, 1.0, 0.0, 1.0f); clrary->operator [] (6) = osg::Vec4(0.0, 1.0, 0.0, 1.0f); clrary->operator [] (2) = osg::Vec4(0.0, 1.0, 0.0, 1.0f); geom->setColorBinding(osg::Geometry::BIND_PER_VERTEX); It changed the colors! So it confuses me why it can't work in the pick function? Any body any idears? Any ideas and suggestions would be appreciated! Thank you! Cheers, Yexin ------------------ Read this topic online here: http://forum.openscenegraph.org/viewtopic.php?p=64994#64994 _______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org