boooch (and anyone who might have suggestions...),
I really appreciate the code you posted but I can't get it to work as you did.
The ONLY way I was able to get the "lines" drawn was to RE-set the vertexArray
of my geometry. Like so: m_ogeomTrailGeometry->setVertexArray(vad);
However, this is an extremely expensive operation. Do you have any suggestions
that I might try to lower my re-draw expense?
Here's my code snippet:
class class1
{
public:
osg::ref_ptr<osg::DrawArrays> m_podreTrailDrawElements;
osg::ref_ptr<osg::Vec3Array> m_ov3aLineVerticesData;
osg::ref_ptr<osg::Geometry > m_ogeomTrailGeometry;
osg::ref_ptr<osg::Geode > m_ogeoTrailGeode;
osg::Vec3d m_ov3dPrevPos;
}
class1::method_1(double xInitial, double yInitial, double zInitial)
{
// initialize previous to current point/position sent in
m_ov3dPrevPos.set(xInitial, yInitial, zInitial);
// curr pos
osg::Vec3d ov3d(xInitial, yInitial, zInitial);
m_podreTrailDrawElements= new osg::DrawArrays(osg::PrimitiveSet::LINE_STRIP);
m_ov3aLineVerticesData = new osg::Vec3Array();
m_ogeomTrailGeometry = new osg::Geometry();
m_ogeoTrailGeode = new osg::Geode;
m_ov3aLineVerticesData->push_back(m_ov3dPrevPos); // prev pos
m_ov3aLineVerticesData->push_back(ov3d); // curr pos
m_podreTrailDrawElements->setFirst(0);
m_podreTrailDrawElements->setCount(m_ov3aLineVerticesData->size());
m_ogeomTrailGeometry->addPrimitiveSet(m_podreTrailDrawElements.get());
m_ogeomTrailGeometry->setVertexArray(m_ov3aLineVerticesData.get());// add
line segs to geometry
m_ogeoTrailGeode->addDrawable(m_ogeomTrailGeometry.get());
// ADD ONLY ONCE to the Node Scene
m_no3vViewer->m_iAddElementToScene(m_ogeoTrailGeode.get());
} // method_1()
class1::method_updateLine(double x, double y, double z)
{
osg::Vec3Array *vad = dynamic_cast<osg::Vec3Array
*>(m_ogeomTrailGeometry->getVertexArray());
vad->push_back(osg::Vec3(x,y,z));
osg::DrawArrays *drArrys = dynamic_cast<osg::DrawArrays
*>(m_ogeomTrailGeometry->getPrimitiveSet(0));
drArrys->setFirst(0);
drArrys->setCount(vad->size());
//drArrys->dirty();
//std::cout<<" vad->size()=="<< vad->size() << std::endl;
m_ogeomTrailGeometry->setVertexArray(vad);
}
------------------------
----
Allen
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=10277#10277
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org