Hello I'm trying to embed osg in an SFML window. I found some examples and managed to include an osgViewer. However there is a problem with the rendering. I'm not sure what exactly is happening but it looks like if the normals get messed up or so, see the attached image.
According to examples and posts I found it should work. Also since ATM I'm not rendering anything with SFML. I also found this post indicating some problems, but since I'm a beginner I'm not sure if it matters: "Notify OSG when OpenGL state gets modified externally (e.g. by SFML)" (can't post links) Also I don't have the push/popGLStates.. Here's my test code: Code: // compile e.g.: // g++ sfml-test.cpp -o sfml-test -lsfml-window -lsfml-graphics -lsfml-system -losg -losgViewer -losgDB -losgGA #include <iostream> // SFML #include <SFML/Window.hpp> //#include <SFML/Graphics.hpp> // OpenSceneGraph #include <osg/PositionAttitudeTransform> //#include <osg/ShapeDrawable> #include <osgViewer/Viewer> #include <osgGA/TrackballManipulator> //#include <osgGA/OrbitManipulator> #include <osgDB/ReadFile> using namespace std; int main() { // SFML Window sf::Window window; window.create(sf::VideoMode(800, 600), "My window"); window.setVerticalSyncEnabled(true); sf::Vector2u size = window.getSize(); // OSG // load model from file osg::ref_ptr<osg::Node> model (osgDB::readNodeFile("cessna.osgt")); if (!model) { cout << "3D model not found, leaving..." << endl; return 1; } // create model position-attitude transformer osg::ref_ptr<osg::PositionAttitudeTransform> model_pat (new osg::PositionAttitudeTransform); // add the object geode as a child of the object PAT model_pat->addChild(model.get()); // set up scene graph // // root --> model_pat --> model // // creating the root node osg::ref_ptr<osg::Group> root (new osg::Group); root->addChild(model_pat.get()); //Creating the viewer osgViewer::Viewer viewer; osg::ref_ptr<osgViewer::GraphicsWindowEmbedded> gw = viewer.setUpViewerAsEmbeddedInWindow(0, 0, size.x, size.y); // set scene to render and run viewer.setSceneData(root.get()); // attach a trackball manipulator to all user control of the view // (needed when loop is used below) //osgGA::OrbitManipulator* om = new osgGA::OrbitManipulator; osgGA::TrackballManipulator* om = new osgGA::TrackballManipulator; viewer.setCameraManipulator(om); viewer.getCameraManipulator()->setHomePosition( osg::Vec3d(30,-50,30), // eye osg::Vec3d(0,0,0), // center osg::Vec3d(0,0,1) // up ); viewer.home(); // instead of returning, use loop now viewer.realize(); /*auto state = gw->getState(); state->setUseModelViewAndProjectionUniforms(true); state->setUseVertexAttributeAliasing(true);*/ // GAME LOOP while (window.isOpen()) { // --> read input sf::Event event; while (window.pollEvent(event)) { switch(event.type) { case sf::Event::Closed: window.close(); break; case sf::Event::KeyPressed: if (event.key.code == sf::Keyboard::Escape) { window.close(); } break; case sf::Event::Resized: gw->resized(0, 0, event.size.width, event.size.height); break; } } window.setActive(); //window.pushGLStates(); // OSG Viewer step viewer.frame(); //window.popGLStates(); window.display(); } return 0; } Any ideas ? Thanks! ------------------ Read this topic online here: http://forum.openscenegraph.org/viewtopic.php?p=69185#69185 Attachments: http://forum.openscenegraph.org//files/screen_osg_150.jpg _______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org