My little experience with OSG with MFC has leaded me to two threads, besides
OSG internal threads:
- The MFC main thread (CWinApp), that controls the MFC GUI.
- Another thread for OSG loop:
        viewer->realize()
        while ( !viewer->done() )
        {
                viewer->sync();
                viewer->update();
                viewer->frame();
        }

The OSG loop must be always done, in order to refresh the scene. And if you
use the MFC thread to do it, no messages will be processed in the GUI, the
GUI will be responseless.


________________________________________
De: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] En nombre de Valentin
Nedyalkov
Enviado el: miércoles, 25 de octubre de 2006 11:17
Para: [email protected]
Asunto: [osg-users] OSG-MFC

Dear osg-users,
I am working on a project, in which I must use OSG and MFC. I 
make eparate class, which contains only OSG function for initalize a 
viewer, drawing and these variables:
 // Application main 3D viewer
   osgProducer::Viewer *_pViewer;
 //node for transformation
   osg::ref_ptr<osg::PositionAttitudeTransform>
 _objectXform;

In GUI there is a button to load 3D model and show in a viewer and 
another button to start animation(for example move along x axis). When user 
click on irst button, viewer is created and its scene contain two node: one 
is objectXform and another is 3Dmodel, which is child of first one. I 
don't use glut window and only do this to show viewer:
 // create the windows and run the threads.
   _pViewer->realize ();
   _pViewer->sync();
   _pViewer->update();
   _pViewer->frame();
but in this case window with a veiwer is not repaint. If I put the code
above in cycle in this way:
  while( _pViewer->done() )
 {
     _pViewer->realize ();
     _pViewer->sync();
    _pViewer->update();
    _pViewer->frame();
 }
to correct update of viewer, user can interact with  window contains 
GUI, while the viewer is opened, because the main thread of my application 
is occupied by this cicle. What could you advise me to do?
I thought to use a worker thread to repaint viewer constanly, but it 
didn't work.And the other problem is that when user click on button to start

animation viewer is not refresh.The scene stays in its initial state, in
spite 
of that:
//animation
for( int i=1; ; i++)
{
        _pViewer->sync();
        _pViewer->update();
         osg::Vec3 newPosit(i,0.0,0);
       _objectXform->setPosition( shipPosit1 );
      _objectXform->setAttitude( osg::Quat(osg::DegreesToRadians( 10.0 ), 
                        osg::Vec3   (0,0,1) ) );
       _pViewer->frame();
 }
This code is in separate function in my OSG class. I think that there 
is a problem with reference.If this code is in the same function where
 _objectXform node is add to scene there is no problem.

 Thank you in advance
 Valentin Nedyalkov

 __________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 

_______________________________________________
osg-users mailing list
[email protected]
http://openscenegraph.net/mailman/listinfo/osg-users
http://www.openscenegraph.org/

Reply via email to