<html dir="ltr"><head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style title="owaParaStyle">P {
        MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px
}
</style>
</head>
<body ocsi="x">
<div dir="ltr"><font face="Tahoma" color="#000000" size="2">Hi all, first posting here, so be gentle.</font></div>
<div dir="ltr"><font face="tahoma" size="2"></font> </div>
<div dir="ltr"><font face="tahoma" size="2">I'm trying to integrate OSG in an existing MFC application in place of a temporary custom OpenGL renderer.</font></div>
<div dir="ltr"><font face="tahoma" size="2"></font> </div>
<div dir="ltr"><font face="tahoma" size="2">I have looked at the osgviewermfc example and based my code on that. So far I have got a viewer up and running with a single master camera. I have tested that the camera is being redrawn by changing the clear-color
 to a random value every frame. When I assign scenedata to the viewer there is nothing being drawn however.</font></div>
<div dir="ltr"><font face="tahoma" size="2"></font> </div>
<div dir="ltr"><font face="tahoma" size="2">I am using the following code in my CView::Oncreate:</font></div>
<div dir="ltr"><font face="tahoma" size="2"></font> </div>
<div dir="ltr"><font face="tahoma" size="2">------------------------</font></div>
<div dir="ltr"><font color="#008000" size="2">
<p>// Create a trackball manipulator</p>
</font><font size="2">
<p>trackball = </font><font color="#0000ff" size="2">new</font><font size="2"> osgGA::TrackballManipulator();</p>
<p></font><font color="#008000" size="2">// Create a Manipulator Switcher</p>
</font><font size="2">
<p>keyswitchManipulator = </font><font color="#0000ff" size="2">new</font><font size="2"> osgGA::KeySwitchMatrixManipulator;</p>
<p></font><font color="#008000" size="2">// Add our trackball manipulator to the switcher</p>
</font><font size="2">
<p>keyswitchManipulator->addMatrixManipulator( </font><font color="#a31515" size="2">'1'</font><font size="2">,
</font><font color="#a31515" size="2">"Trackball"</font><font size="2">, trackball);</p>
<p></font><font color="#008000" size="2">// Init the switcher to the first manipulator (in this case the only manipulator)</p>
</font><font size="2">
<p>keyswitchManipulator->selectMatrixManipulator(0); </font><font color="#008000" size="2">// Zero based index Value</p>
</font><font size="2">
<p></font><font color="#008000" size="2">// Init the main Root Node/Group</p>
</font><font size="2">
<p>mRoot = </font><font color="#0000ff" size="2">new</font><font size="2"> osg::Group;</p>
<p></p>
<p></font></p>
<p><font color="#008000" size="2"></p>
</font><font size="2"></font><font color="#008000" size="2">// Load the Model from the model name
<p></p>
</font><font size="2">
<p>mModel = osgDB::readNodeFile(</font><font color="#a31515" size="2">"c:/cow.osg"</font><font size="2">);</p>
<p></font><font color="#008000" size="2">//// Optimize the model</p>
</font><font size="2">
<p></font><font color="#008000" size="2">//osgUtil::Optimizer optimizer;</p>
</font><font size="2">
<p></font><font color="#008000" size="2">//optimizer.optimize(mModel);</p>
</font><font size="2">
<p></font><font color="#008000" size="2">//optimizer.reset();</p>
</font><font size="2">
<p></font><font color="#008000" size="2">// Add the model to the scene</p>
</font><font size="2">
<p>mRoot->addChild(mModel);</p>
<p></font><font color="#008000" size="2">// Local Variable to hold window size data</p>
</font><font size="2">
<p>RECT rect;</p>
<p></font><font color="#008000" size="2">// Create the viewer for this window</p>
</font><font size="2">
<p>mViewer = </font><font color="#0000ff" size="2">new</font><font size="2"> osgViewer::Viewer();</p>
<p></font><font color="#008000" size="2">// Add a Stats Handler to the viewer</p>
</font><font size="2">
<p>mViewer->addEventHandler(</font><font color="#0000ff" size="2">new</font><font size="2"> osgViewer::StatsHandler);</p>
<p></p>
<p></font><font color="#008000" size="2">// Get the current window size</p>
</font><font size="2">
<p>::GetWindowRect(m_hWnd, &rect);</p>
<p></font><font color="#008000" size="2">// Init the GraphicsContext Traits</p>
</font><font size="2">
<p>traits = </font><font color="#0000ff" size="2">new</font><font size="2"> osg::GraphicsContext::Traits;</p>
<p></font><font color="#008000" size="2">// Init the Windata Variable that holds the handle for the Window to display OSG in.</p>
</font><font size="2">
<p>windata = </font><font color="#0000ff" size="2">new</font><font size="2"> osgViewer::GraphicsWindowWin32::WindowData(m_hWnd);</p>
<p></font><font color="#008000" size="2">// Setup the traits parameters</p>
</font><font size="2">
<p>traits->x = 0;</p>
<p>traits->y = 0;</p>
<p>traits->width = rect.right - rect.left;</p>
<p>traits->height = rect.bottom - rect.top;</p>
<p>traits->windowDecoration = </font><font color="#0000ff" size="2">false</font><font size="2">;</p>
<p>traits->doubleBuffer = </font><font color="#0000ff" size="2">true</font><font size="2">;</p>
<p>traits->sharedContext = 0;</p>
<p>traits->setInheritedWindowPixelFormat = </font><font color="#0000ff" size="2">true</font><font size="2">;</p>
<p>traits->inheritedWindowData = windata;</p>
<p></font><font color="#008000" size="2">// Create the Graphics Context</p>
</font><font size="2">
<p>gc = osg::GraphicsContext::createGraphicsContext(traits);</p>
<p></font><font color="#008000" size="2">// Init a new Camera (Master for this View)</p>
</font><font size="2">
<p>osg_camera = </font><font color="#0000ff" size="2">new</font><font size="2"> osg::Camera;</p>
<p></font><font color="#008000" size="2">// Assign Graphics Context to the Camera</p>
</font><font size="2">
<p>osg_camera->setGraphicsContext(gc);</p>
<p></font><font color="#008000" size="2">// Set the viewport for the Camera</p>
</font><font size="2">
<p>osg_camera->setViewport(</font><font color="#0000ff" size="2">new</font><font size="2"> osg::Viewport(traits->x, traits->y, traits->width, traits->height));</p>
<p></font><font color="#008000" size="2">// Add the Camera to the Viewer</p>
</font><font size="2">
<p>mViewer->addSlave(osg_camera);</p>
<p></font><font color="#008000" size="2">// Add the Camera Manipulator to the Viewer</p>
</font><font size="2">
<p>mViewer->setCameraManipulator(keyswitchManipulator);</p>
<p></font><font color="#008000" size="2">// Set the Scene Data</p>
</font><font size="2">
<p>mViewer->setSceneData(mRoot);</p>
<p></font><font color="#008000" size="2">// Realize the Viewer</p>
</font><font size="2">
<p>mViewer->realize();</p>
<p><font face="times new roman">-----------------</font></p>
<p><font face="times new roman"></font> </p>
<p><font face="times new roman">And in my views OnDraw I use the following:</font></p>
<p><font face="times new roman"></font> </p>
<p><font face="times new roman">--------------------</font></p>
<font size="2">
<p></font><font color="#0000ff" size="2">float</font><font size="2"> r = (</font><font color="#0000ff" size="2">float</font><font size="2">) rand()/RAND_MAX;</p>
<p></font><font color="#0000ff" size="2">float</font><font size="2"> g = (</font><font color="#0000ff" size="2">float</font><font size="2">) rand()/RAND_MAX;</p>
<p></font><font color="#0000ff" size="2">float</font><font size="2"> b = (</font><font color="#0000ff" size="2">float</font><font size="2">) rand()/RAND_MAX;</p>
<p></font><font color="#0000ff" size="2">float</font><font size="2"> a = (</font><font color="#0000ff" size="2">float</font><font size="2">) rand()/RAND_MAX;</p>
<p>osg_camera->setClearColor( osg::Vec4(r,g,b,a) );</font><font size="2"></p>
<p>mViewer->frame();</p>
<p><font face="times new roman">--------------------</font></p>
<p><font face="times new roman"></font> </p>
<p><font face="times new roman">As far as I can tell the osgviewermfc uses pretty much the same code.</font></p>
<p>Any and all help and hint as to what I'm doing wrong would be much appreciated.</p>
<p><font face="times new roman"></font> </p>
<p><font face="times new roman">Regards, and thanks in advance.</font></p>
<p><font face="times new roman"></font> </p>
<p><font face="times new roman">Jesper D. Thomsen</font></p>
</font></font></div>
</body>
</html>