[osg-users] Displaying a scene in the background of a QGraphicsView

René Molenaar megamillerzoid at gmail.com
Sat Sep 6 06:31:55 PDT 2008


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 <robert.osfield at gmail.com>

> 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
> <max.pfingsthorn at gmail.com> 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" <robert.osfield at gmail.com>
> 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
> >> <max.pfingsthorn at gmail.com> 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
> >>> osg-users at lists.openscenegraph.org
> >>>
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> >>>
> >>>
> >> _______________________________________________
> >> osg-users mailing list
> >> osg-users at lists.openscenegraph.org
> >>
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> >
> > _______________________________________________
> > osg-users mailing list
> > osg-users at lists.openscenegraph.org
> >
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> >
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20080906/14aa903d/attachment-0003.htm>


More information about the osg-users mailing list