<div dir="ltr">Hi Hui,<br><br>On Monday, 1 June 2020 02:28:04 UTC+1, Hui Li  wrote:<blockquote class="gmail_quote" style="margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir="ltr">Hi Robert,<div><br></div><div>Sorry for the late reply. The codes of CreateGeometryNode looks like this: </div><div><div>osg::ref_ptr<osg::<wbr>MatrixTransform> CreateGeometryNode() {</div><div>    std::vector<float> xyzs = RandomPoints(); ///< Create ramdon number of points </div><div>    osg::Vec3Array vs = new osg::Vec3Array(xyzs.size()/3, (const osg::Vec3 *)(xyzs.data()));</div><div>    osg::ref_ptr<osg::Geometry> geo = new osg::Geometry;</div><div>    geo->setVertexArray(vs.get());</div><div>    geo->setColorArray(osg::Vec3(<wbr>0.5,0.5,0.5));</div><div>    geo->setColorBinding(osg::<wbr>Geometry::BIND_OVERALL);</div><div>    geo->addPrimitiveSet(new osg::DrawArrays(osg::<wbr>PrimitiveSet::POINTS, 0, numpt));</div><div>    geo->getOrCreateStateSet()-><wbr>setMode(GL_LIGHTING, osg::StateAttribute::OFF);</div><div>    geo->getOrCreateStateSet()-><wbr>setAttribute(new osg::Point(size), osg::StateAttribute::ON);</div><div>    osg::ref_ptr<osg::<wbr>MatrixTransform> mt = new osg::MatrixTransform;</div><div>    osg::ref_ptr<osg::Geode> geode = new osg::Geode;</div><div>    geode->addDrawable(geo.get());</div><div>    mt->addChild(geode);</div><div>    return mt; </div><div>}</div><br></div></div></blockquote><div><br></div><div>Adding and removing data continuously is least efficient way to implement this type of functionality, it's not just an OpenGL/OSG thing, it applies pretty well to all computing.</div><div><br></div><div>If you have a stream of data coming in then the best way to manage it is to allocated fixed size data and then fill it in dynamically.  So no adding and removing, no new and delete on every frame.</div><div><br></div><div>If you have a really large dataset then chunk the data into blocks, 10,000 vertices per osg::Gemetry in a good place to start, but make this variable so you can figure what is the sweet spot for your system.</div><div><br></div><div>To vary th enumber of points draw using single DrawArrays per osg::Geometry and simply change the count to match the number of vertices you want to render.</div><div><br></div><div>If your data stream suddenly needs more points to represent it and your don't have enough available in your bricks then that is the time to allocate new bricks.</div><div><br></div><div>As for the cache, well the OSG does have cache for reusing GL objects but it intended to be used for the types of usage you are pushing it through.  Follow the above steps and your application will work perfectly.</div><div><br></div><div>Cheers,</div><div>Robert.<br></div><div> </div></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups "OpenSceneGraph Users" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an email to <a href="mailto:osg-users+unsubscribe@googlegroups.com">osg-users+unsubscribe@googlegroups.com</a>.<br />
To view this discussion on the web visit <a href="https://groups.google.com/d/msgid/osg-users/df2eb7ed-2790-4212-bb25-3935326d8edf%40googlegroups.com?utm_medium=email&utm_source=footer">https://groups.google.com/d/msgid/osg-users/df2eb7ed-2790-4212-bb25-3935326d8edf%40googlegroups.com</a>.<br />