[osg-users] background color fills all the window (not only the given viewport)

Frederic Marmond fmarmond at gmail.com
Wed Mar 25 07:44:51 PDT 2009


thanks Robert,

I already did it (here is my test code):

	RECT rect;
    GetWindowRect(hwnd,&rect);

	// Set window traits and gc
	m_Traits = new osg::GraphicsContext::Traits;

	osg::ref_ptr<osg::Referenced> windata = new
osgViewer::GraphicsWindowWin32::WindowData( hwnd );
	m_Traits->width = 100; //rect.right - rect.left - m_Traits->x;
	m_Traits->height = 100; //rect.bottom - rect.top - m_Traits->y;
	m_Traits->x = 0;
	m_Traits->y = rect.bottom - 0 - m_Traits->height;

	m_Traits->windowDecoration = false;
	m_Traits->doubleBuffer = true;
	m_Traits->sharedContext = 0;
	m_Traits->setInheritedWindowPixelFormat = false;
	m_Traits->inheritedWindowData = windata;
	osg::GraphicsContext* gc =
osg::GraphicsContext::createGraphicsContext( m_Traits.get() );
	gc->setClearColor( osg::Vec4f(1.2f, 0.2f, 0.6f, 1.0f) );
	gc->setClearMask( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

	// Create camera
	osg::ref_ptr<osg::Camera> camera = new osg::Camera;
	camera->setGraphicsContext(gc);
	camera->setViewport( new osg::Viewport(m_Traits->x, m_Traits->y,
m_Traits->width, m_Traits->height) );
	camera->setProjectionMatrixAsPerspective( 30.0f,
(double)m_Traits->width/(double)m_Traits->height, 1.0f, 10000.0f );
	camera->setClearMask( GL_DEPTH_BUFFER_BIT );

	// Create viewer
	m_Viewer = new osgViewer::Viewer;
	m_Viewer->setThreadingModel( osgViewer::Viewer::SingleThreaded );
	m_Viewer->setCamera( camera.get() );
	m_Viewer->setCameraManipulator( new osgGA::TrackballManipulator );

	// Set root node of the scene
	m_Viewer->setSceneData(osgDB::readNodeFile("D:\\Program
Files\\OpenSceneGraph-2.8.0\\cessna.osg"));
	m_Viewer->realize();

	// Create a thread for the simulation loop
	_beginthread(&RenderThread, 0, m_Viewer);




the camera displays at the right place, right size (0,0,100,100 : top
left corner). But all other window part is filled with background
color.

I'm in an activeX, I took part of the code of osgActiveX, but I can't
use MFC in my case.
The only notable difference between osgActiveX and my code, is that he
was using GetSafeHwnd(), and I use (for now) GetForegroundWindow() for
hwnd.
As I come from the Linux world, I'm not used to windows subtilities,
and I may be wrong doing this ?
Is there something wrong in that code, or something elsewhere I may looking at ?

best regards
Fred



2009/3/25 Robert Osfield <robert.osfield at gmail.com>:
> Hi Fred,
>
> Just set the Camera's viewport so it only covers the part you want to render
> to.
>
> Robert.
>
> On Wed, Mar 25, 2009 at 2:06 PM, Frederic Marmond <fmarmond at gmail.com>
> wrote:
>>
>> hello world,
>>
>> on a win32 project, I would like to display an osg Viewer in a part of
>> the window.
>> I set my osg::GraphicsContext::Traits with coords I want, set the
>> inheritedWindowData with osgViewer::GraphicsWindowWin32::WindowData(
>> hwnd )
>>
>> my model is well placed and displayed (in the area I wanted), but the
>> entire window is filled with background color.
>> Is there any way to avoid this? any suggestion ?
>>
>> thanks in advance
>>
>> Fred
>> _______________________________________________
>> 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
>
>



More information about the osg-users mailing list