Hi,

Background:
I've written an application in C# for various reasons. SharpGL provided the 
OpenGL portion, C# provided the Database, and Intellisense works with it in VS 
2010. I've rewritten this application in 3 different frameworks and have hit 
issues I could not solve for one reason or another. For example, now that my 
application works and I use it everyday, I'm trying to enhance some of its 
features, such as loading a 3D object and good text rendering.

I've come across OpenSceneGraph and have been trying to use it with the C# 
wrappers. I couldn't get that working and read a bunch of posts providing other 
solutions and mentioning it isn't supported anymore. Thus, I've learned to 
write a wrapper for a C++ OSG DLL to call some native OSG functions.

It works great, except that it doesn't, LOL. The code it fine, I've tested it 
in a sample, non C# application using the viewer and all.

The Question:
The part that I don't understand is how to use OSG to render in an existing 
OpenGL viewport. Is there a way to attach to the existing OpenGL instead of 
creating the OSG viewer as noted in every OSG example I've seen?

C# SharpGL initialization

Code:

// Initialize SharpGL
void initSharpGL() {
   openGLControl = new SharpGL.OpenGLControl();
   ((System.ComponentModel.ISupportInitialize)(openGLControl)).BeginInit();

   // 
   // openGLControl
   // 
   openGLControl.BitDepth = 32;
   openGLControl.Dock = System.Windows.Forms.DockStyle.Fill;
   openGLControl.DrawFPS = true;
   openGLControl.FrameRate = 60;
   openGLControl.Location = new System.Drawing.Point(0, 0);
   openGLControl.Name = "openGLControl";
   openGLControl.RenderContextType = SharpGL.RenderContextType.FBO;
   openGLControl.Size = new System.Drawing.Size(1680, 1060);
   openGLControl.TabIndex = 0;
   openGLControl.OpenGLInitialized += new 
System.EventHandler(openGLControl_OpenGLInitialized);
   openGLControl.OpenGLDraw += new 
System.Windows.Forms.PaintEventHandler(openGLControl_OpenGLDraw);
   openGLControl.Resized += new System.EventHandler(openGLControl_Resized);
   openGLControl.Click += new System.EventHandler(OpenGL_Click);
   ((System.ComponentModel.ISupportInitialize)(openGLControl)).EndInit();
   Controls.Add(openGLControl);

   ...
}




Native OSG Code:

Code:

// Create the scene root
mRoot = new osg::Group;

// The viewer
mViewer = new osgViewer::Viewer;
mWindow = mViewer->setUpViewerAsEmbeddedInWindow(0, 0, 1680, 998);
mViewer->getCamera()->setClearMask(0);
mViewer->setSceneData(mRoot);
mViewer->realize();

osg::ref_ptr<osg::Geode> geode = new osg::Geode;

std::string fontFile("arial.ttf");
font = osgText::readFontFile(fontFile);
if (font.valid()) {

   osgText::Text* text = new osgText::Text;
   if (text != 0) {
      text->setFont(font);
      text->setColor(osg::Vec4(0.0f, 1.0f, 1.0f, 1.0f));
      text->setCharacterSize(40.0f);
      text->setPosition(osg::Vec3(100.0f, 100.0f, 0.0f));
      text->setText("SomeSome!");

      text->setLayout(osgText::Text::LEFT_TO_RIGHT);

      geode->addDrawable(text);
   }
}

mRoot->addChild(geode);




The OSG Draw Callback function contents

Code:

mViewer->frame();




Thank you!

Cheers,
Dainon

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





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

Reply via email to