Three weeks ago Eric Zeremba posted a simular qt - osg example, (see 14 aug Eric Zaremba [osg-users] Qt4, OSG and HUD, )
it also had a resize problem, after resize the widget would scale but the pick coordinates would be misalligned. I just tried glPushAttrib(GL_VIEWPORT_BIT); glPopAttrib(); before and after the frame() This way, the widget would remains unscaled, and there would be no misallignment, i don't now yet how to also scale the widget, when you rescale the window in this case. Some rescale info probably needs to be sent to qt. René 2008/9/5 Robert Osfield <[EMAIL PROTECTED]> > Hi Max, > > The topic of mixing OpenGL code with the OSG has been discussed many > times on osg-users so have a look through the archives on this topic. > glPushAttrib would also be a good keyword to search on. > > Robert. > > On Fri, Sep 5, 2008 at 6:42 PM, Max Pfingsthorn > <[EMAIL PROTECTED]> wrote: > > Hello Robert, > > > > Thank you very much for your reply. > > > > My thoughts exactly. But how do I save and restore the opengl state in > its > > entirety? I tried pushing/popping the modelview, projection and even the > > texture matrices around calling viewer->frame(). I also explicitly > glGet'ed > > them and loaded them again after OSG was done in case push/pops were not > > matched properly inside OSG. > > > > What else is there to save in the opengl state? > > > > Best regards, > > Max Pfingsthorn > > > > On 5 Sep 2008, at 17:40, "Robert Osfield" <[EMAIL PROTECTED]> > wrote: > > > >> Hi Max, > >> > >> My guess is that Qt is changing OpenGL state which is not being > >> protected, and then you are mixing this with the OSG which assumes > >> that it has complete control over OpenGL state so gets messed up by > >> the QT changes to state, and also Qt OpenGL code is likely to be > >> messed up by the OSG changing state. > >> > >> I don't know enough about the Qt's implementation here to really > >> provide my insight. Personally I'd rather keep Qt doing Windowing and > >> the OSG doing OpenGL. If you want to mix things then you'll need to > >> start playing games with push and popping OpenGL state when entering > >> the Qt OpenGl code path, and also resetting OpenGL state after leaving > >> the OSG section. > >> > >> Robert. > >> > >> On Fri, Sep 5, 2008 at 4:16 PM, Max Pfingsthorn > >> <[EMAIL PROTECTED]> wrote: > >>> > >>> Dear users, > >>> > >>> this problem has been with me for a while. I've even tried it with > other > >>> graphics engines (Ogre) to no avail. > >>> > >>> As shown in this toy project at Trolltech Labs > >>> > >>> > >>> > http://labs.trolltech.com/blogs/2008/06/27/accelerate-your-widgets-with-opengl/ > >>> > >>> I would like to show a scene in the background of a QGraphicsView and I > >>> was very happy that the ViewerQT class already was a QGLWidget. > However, > >>> there seems to be something scaled wrong after I call viewer->frame(). > >>> > >>> Attached are a few screenshots and the code I have so far. I'm > currently > >>> running Ubuntu 8.04.1 and I'm using the OSG 2.2 binaries that came with > >>> it. Beware that you need at least Qt 4.4 to compile this code. > >>> > >>> qt-osg-1.png and -2.png show how far I am at the moment. Number 2 shows > >>> the problem with scaling the window. OSG shows the scene fine in the > >>> background, but the widget I'd like to overlay is stretched. I believe > >>> the OpenGL version of QPainter draws in some normalized coordinates and > >>> the bounding box isn't properly updated. qt-osg-ok-1.png and -2.png > show > >>> the same window sizes without calling viewer->frame(), and the scaling > >>> of the widget is ok. Just no scene in the background of course. > >>> > >>> I've traced the problem to osgViewer::Renderer::cull_draw(). I believe, > >>> when the geometry of the view is set, something makes Qt stop drawing > >>> correctly. > >>> > >>> In the function which calls viewer->frame() (in > >>> osgGraphicsView::drawBackground), I thought I save any sort of relevant > >>> OpenGL state, the projection matrix, model/view matrix, and even the > >>> texture matrix. After the call the viewer->frame(), I restore them > >>> again. Is there any other state that I might have overlooked which is > >>> set in the renderer? Also, do you have any idea why the Qt widget is > not > >>> drawn entirely sometimes? Could it have something do to with buffer > >>> swaps? > >>> > >>> Thank you all for your help in advance! > >>> > >>> Best regards, > >>> Max Pfingsthorn > >>> > >>> _______________________________________________ > >>> osg-users mailing list > >>> [email protected] > >>> > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > >>> > >>> > >> _______________________________________________ > >> osg-users mailing list > >> [email protected] > >> > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > > > > _______________________________________________ > > osg-users mailing list > > [email protected] > > > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > > > _______________________________________________ > osg-users mailing list > [email protected] > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >
_______________________________________________ osg-users mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

