opengl - How to change background at runtime on openscenegraph -


i try add 3d object on viewer , change background dynamically. capture webcam using opencv videocapture.

i did below steps :

  1. open video capture , frame
  2. create openscenegraph root
  3. add child root ( read .osg file 3d object)
  4. create texture2d object background
  5. set image of background
  6. create camera view background
  7. add camera root
  8. set data of viewer (viewer.setscenedat(root))
  9. run viewer.run()

    these steps add first frame background , add 3d object scene. can't change background each frame. how can it?

code :

cv::videocapture cap(0);   cv::mat frame;  if(!cap.isopened())   {     std::cout << "webcam cannot open!\n";     return; }    osgviewer::viewer viewer; osg::ref_ptr<osg::group> root = new osg::group(); osg::ref_ptr<osg::texture2d> bg = new osg::texture2d();  root->addchild(osgdb::readnodefile("object.osg")); bg->setfilter(osg::texture::filterparameter::min_filter, osg::texture::filtermode::linear); bg->setfilter(osg::texture::filterparameter::mag_filter, osg::texture::filtermode::linear);     bg->setdatavariance(osg::object::dynamic);  cap >> frame; osg::ref_ptr<osg::image> osgimage = new osg::image; osgimage->setimage(frame.cols, frame.rows, 3,     gl_rgb, gl_rgb, gl_unsigned_byte,     (uchar*)(frame.data),     osg::image::allocationmode::no_delete, 1); bg->setimage(osgimage);  osg::ref_ptr<osg::camera> bg_cam = new osg::camera(); bg_cam->setprojectionmatrixasortho2d(-0.5, 0.5, -0.5, 0.5); bg_cam->setviewmatrixaslookat(     osg::vec3(0.5, 0.5, -1.0),     osg::vec3(0.5, 0.5, 0.0),     osg::vec3(0.0, -1.0, 0.0)     ); bg_cam->setrenderorder(osg::camera::pre_render); bg_cam->setreferenceframe(osg::camera::absolute_rf); bg_cam->addchild(initializebackground(bg)); root->addchild(bg_cam);  viewer.setscenedata(root); viewer.getcamera()->setprojectionmatrixasperspective(     40., 1., 1., 100.); viewer.getcamera()->setclearmask(gl_depth_buffer_bit); viewer.getcamera()->setclearcolor(osg::vec4(1.0, 0.0, 0.0, 1.0));  viewer.run(); 

viewer.getcamera()->setclearmask(gl_depth_buffer_bit); viewer.getcamera()->setclearcolor(osg::vec4(1.0, 0.0, 0.0, 1.0));  bg->setdatavariance(osg::object::dynamic); viewer.realize();  // set windows , associated threads.   while(!viewer.done()) {     cap >> frame;           osg::ref_ptr<osg::image> osgimage = new osg::image;     osgimage->setimage(frame.cols, frame.rows, 3,         gl_rgb, gl_bgr, gl_unsigned_byte,         (uchar*)(frame.data),         osg::image::allocationmode::no_delete, 1);     bg->setimage(osgimage);      viewer.frame(); }    

this code changes background dynamially.


Comments

Popular posts from this blog

Java 3D LWJGL collision -

methods - python can't use function in submodule -

c# - ErrorThe type or namespace name 'AxWMPLib' could not be found (are you missing a using directive or an assembly reference?) -