greg_nhi1 wrote:
> Hi,
> 
> Our application (Windows x64) writes to a memory buffer rather than a window. 
>  The app using OSG runs as a hidden console app and streams the rendered 
> images via named pipe to a client app.  (Even if we weren't using a separate 
> process for OSG we need to render using PIXEL_BUFFER since our app is WPF and 
> doesn't provide a usable window handle.)
> 
> When I resize the display window I send a message to my processor so it can 
> resize the OSG components.  However, I cannot find a way to do this that 
> works.  I get the following results by trying different methods.
> 
> I've searched the sample code and forums and can't find anything (other than 
> the methods I have tried based on sample code).  Any help would be 
> appreciated.
> 
> 
> For reference (I'm using an earth image to check proportions and coordinates 
> - I get the same results using models):
> 
> The last image (SmallEarthEventQueue) was generated using this source code to 
> resize.
> 
> double eventTime = m_nhiViewer->getEventQueue()->getTime();
>                       m_nhiViewer->getEventQueue()->windowResize(0, 0, 
> m_width, m_height, eventTime);
> 
> 
> The next up (SmallEarth-NoProjChange) was generated using this source code to 
> resize.
> 
> gc->resized(0, 0, m_width, m_height);
> 
> camera->resize(m_width, m_height, osg::Camera::ResizeMask::RESIZE_ATTACHMENTS 
> | osg::Camera::ResizeMask::RESIZE_VIEWPORT);
> 
> 
> The next up (SmallEarth-ProjChange) was generated using this source code.
> 
> osg::Camera * camera = m_nhiViewer->getCamera();
> if (camera != nullptr)
> {
>       osg::ref_ptr<osg::GraphicsContext> gc = camera->getGraphicsContext();
>       if (gc != nullptr)
>       {
>               osg::Matrixd origCamProjMatrix = camera->getProjectionMatrix();
> 
>               gc->resized(0, 0, m_width, m_height);
> 
>               double widthChangeRatio = double(m_width) / double(m_lastWidth);
>               double heightChangeRatio = double(m_height) / 
> double(m_lastHeight);
>               double aspectRatioChange = widthChangeRatio / heightChangeRatio;
> 
>               if (aspectRatioChange != 1.0)
>               {
>                       switch (camera->getProjectionResizePolicy())
>                       {
>                       case(osg::Camera::HORIZONTAL) :
>                       case(osg::Camera::VERTICAL) :
>                               origCamProjMatrix *= osg::Matrix::scale(1.0 / 
> aspectRatioChange, 1.0 / aspectRatioChange, 1.0);
>                               origCamProjMatrix *= 
> osg::Matrix::translate(-(1.0 - widthChangeRatio), -(1.0 - heightChangeRatio), 
> 0.0);
>                               break;
> 
>                       default: 
>                               break;
>                       }
>               }
> 
>               camera->resize(m_width, m_height, 
> osg::Camera::ResizeMask::RESIZE_ATTACHMENTS | 
> osg::Camera::ResizeMask::RESIZE_VIEWPORT);
> 
>               camera->setProjectionMatrix(origCamProjMatrix);
>       }
> }
> 
> 
> 
> ... 
> 
> Thank you!
> 
> Cheers,
> Greg


------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=66225#66225





_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to