<div dir="ltr">Hello everyone,<div><br></div><div>I am not experienced at osg and want to post my question here (please bear me if my question is stupid). </div><div><br></div><div>Here is the backround of my question:</div><div>I get 400 ~ 800 incoming points of simulated road marks by one programm every 20 ~ 30 ms. My Programm is fed by these points continuously on the main thread. My goal is to visualise them by connecting them into lines:</div><div><br></div><div>After reading many releated posts on this forum, I got some ideas and implemented them:<br></div><div><br></div><div>this is basic setup:</div><div>    osg::ref_ptr<osg::Geode> road_mark_geode; // hold the vertices inside my program</div><div>    ...</div><div>    osg::ref_ptr<osg::Geometry> geom(new osg::Geometry());<br></div><div><br></div><div><div>    geom->setUseVertexBufferObjects(true);</div><div>    geom->setUseDisplayList(false);</div><div>    geom->setUpdateCallback(new DynamicRoadMarkCallback); //  I customized a osg::Drawable::UpdateCallback to run vertices->dirty(), to update inside road mark vertices </div></div><div>    osg::Vec3Array* vertices(new osg::Vec3Array());</div><div>    geom->setVertexArray(vertices);</div><div>    geom->addPrimitiveSet(new osg::DrawArrays(GL_LINE_STRIP, 0, DEFAULT_VERTEX_SIZE));<br></div><div>    road_mark_geode->addDrawable(geom.get());</div><div>    ...</div><div><br></div><div>Given that data reception is on main thread, i did this (points_in is incoming data from another program):</div><div><br></div><div>Loop on main thread:</div><div>    receive points and store them -> call function "<i>update_pos_of_vertices</i> " to set the pos (x, y, z) for vertices by new points.</div><div>   </div><div>    Blow is the interested code snippet:</div><div>   </div><div>    getdata(points_in, points_save); // save incoming data into "<i>points_save"</i> of my own data type</div><div> </div><div>    update_pos_of_vertices (points_save) {</div><div>        osg::Geometry* geo_drawable = static_cast<osg::Geometry*>(road_mark_geode->getDrawable(0));</div><div><span style="white-space:pre">   </span>geo_drawable->setDataVariance(osg::Object::DYNAMIC);</div><div><span style="white-space:pre">       </span>osg::DrawArrays* drawArrays = static_cast<osg::DrawArrays*>(geo_drawable->getPrimitiveSet(0));</div><div><span style="white-space:pre">       </span>osg::Vec3Array* vertices = static_cast<osg::Vec3Array*>(geo_drawable->getVertexArray());</div><div><span style="white-space:pre">     </span>int num_vertices = points_save.size();</div><div><span style="white-space:pre">        </span>drawArrays->setCount(num_vertices);</div><div><span style="white-space:pre">        </span>vertices->resize(num_vertices);</div><div><span style="white-space:pre">    </span>for (... ) { </div><div><span style="white-space:pre">                </span>vertices->at(i).set(points_save[i]); // set new pos of each vertex</div><div><span style="white-space:pre"> </span>}</div><div>    }</div><div><br></div><div>My program ran and i got visualized lines which are linked by points (see pic in attachment). But my program becomes very slow: average time for one single loop is 50ms. So my question is:</div><div>How can I improve the performance?</div><div>Did I do anything wrong regarding the my implementation above?</div><div><br></div><div>Look  forward to any help, tips and remarks!</div><div>Thank you</div><div><br></div><div>Yuan</div><div><br></div><div>   </div><div><br></div><div><br></div><div><br></div><div>    </div><div><br></div><div>    </div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div> </div><div><br></div><div><br></div><div><br></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/5a56fb13-4d17-41dd-a7c5-62ec49a3d421%40googlegroups.com?utm_medium=email&utm_source=footer">https://groups.google.com/d/msgid/osg-users/5a56fb13-4d17-41dd-a7c5-62ec49a3d421%40googlegroups.com</a>.<br />