Hi,
I assume someone will interested in this,
enough to read my code and reply with suggestions.
I am presenting code that should replace the OpenGL code presented above.
Both codes are run insides the glutDisplayFunc callback, "display call".
I have also added the OSG object initialization code
required prior to the OSG display call.
I expect this is where I need other suggestions.
1) This is the code used in each OSG "display call".
How can I copy byte-for-byte, like memcpy,
from the external stream "buffer" into the VBO ?
Code:
float *buffer = captureBuffer();
for (uint j = 0; j < vec->size(); j++)
{
vec->at(j) = osg::Vec3(buffer[j*3],buffer[j*3+1],buffer[j*3+2]);
vec->dirty();
}
releaseBuffer();
// update and render the scene graph
if (viewer.valid()) viewer->frame();
2) This is the code to initialize OSG display & objects.
I expect I am doing too much work here....HELP !
Code:
//Initialize an OSG scene
osg::ref_ptr<osgViewer::Viewer> viewer;
osg::observer_ptr<osgViewer::GraphicsWindow> window;
osg::ref_ptr<osg::Node> loadedModel = createScene();
// Create objects to store geometry and vertices.
osg::ref_ptr<osg::Geode> geode = new osg::Geode;
osg::ref_ptr<osg::Geometry> geom = new osg::Geometry;
osg::ref_ptr<osg::Vec3Array> vec = new osg::Vec3Array;
// create the view of the scene.
viewer = new osgViewer::Viewer;
window = viewer->setUpViewerAsEmbeddedInWindow(100,100,800,600);
viewer->setSceneData(loadedModel.get());
viewer->setCameraManipulator(new osgGA::TrackballManipulator);
viewer->addEventHandler(new osgViewer::StatsHandler);
viewer->realize();
osg::Node* createScene(void)
{
// Disable Display lists and setup Vertex Buffer Objects
geom->setUseDisplayList (false);
geom->setUseVertexBufferObjects(true);
// Set VBO to STREAMING since attributes are changing per frame
osg::VertexBufferObject* df = geom->getOrCreateVertexBufferObject();
df->setUsage (GL_DYNAMIC_DRAW);//(GL_STREAM_DRAW);//
vec->resize(buffer_size);
//initial box size for auto setup boundry// FIXME: draw a cube in the
scene
vec->at(0)=osg::Vec3( 2.0, 2.0, 2.0);
vec->at(1)=osg::Vec3(-2.0,-2.0,-2.0);
vec->at(2)=osg::Vec3(-2.0, 2.0, 2.0);
vec->at(3)=osg::Vec3( 2.0,-2.0,-2.0);
geom->setVertexArray( vec.get() );
osg::Vec4Array* c = new osg::Vec4Array;
c->push_back(osg::Vec4(1.0f,1.0f,1.0f,1.0f));
geom->setColorArray(c);
geom->setColorBinding(osg::Geometry::BIND_OVERALL);
osg::Vec3Array* n = new osg::Vec3Array;
n->push_back(osg::Vec3(0.0f,-1.0f,0.0f));
geom->setNormalArray(n);
geom->setNormalBinding(osg::Geometry::BIND_OVERALL);
geom->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::POINTS,
0, buffer_size));
geode->addDrawable (geom.get());
return (geode);
}
Thank you!
Cheers,
Ga
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=43118#43118
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org