Hi Bram, just curious what you will get if you set your viewer to viewer->setLightingMode(osg::View::NO_LIGHT);. Will this help?
Nick On Sun, Jul 20, 2014 at 8:33 PM, Bram Vaessen <[email protected]> wrote: > I've tried to set the global defaults on the statesets of the camera's, > but that didn't help. I'll try to give give a complete list of code that is > used to set up the scene: > > in main: > > Code: > //screen size > int screenWidth = 1280; > int screenHeight = 720; > > > // construct the viewer > osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer(); > viewer->setThreadingModel(osgViewer::ViewerBase::SingleThreaded); > osg::ref_ptr<osg::DisplaySettings> ds = new osg::DisplaySettings(); > ds->setScreenWidth(screenWidth); > ds->setScreenHeight(screenHeight); > ds->setNumMultiSamples(0); > viewer->setDisplaySettings(ds); > viewer->setUpViewInWindow(20,40,screenWidth,screenHeight,1); > viewer->realize(); > > > > then the viewer is passed to a rendermanager class and it does this: > > > Code: > rootNode = new osg::Group; > viewer->setSceneData(rootNode); > rootNode->addChild(screenQuatGeode); //this is the quad used for the > deffered rendering of the main scene > rootNode->addChild(worldCamera); //camera used for main scene > rootNode->addChild(waterCamera); //seperate camera for the water effects > > //set up the window camera > osg::ref_ptr<osg::Camera> windowCamera = viewer->getCamera(); > windowCamera->setReferenceFrame( osg::Camera::ABSOLUTE_RF ); > windowCamera->setProjectionMatrixAsOrtho2D(0,1,0,1); > //3 uniforms added to rootNode also ,but left them out here... > > > > Then the guiManager is created, which create a sperate camera for the GUI: > > > Code: > osg::ref_ptr<osg::Camera> camera = new osg::Camera(); > camera->setViewport(new osg::Viewport(0,0,width,height)); > camera->setClearMask(GL_DEPTH_BUFFER_BIT); > camera->setReferenceFrame(osg::Transform::ABSOLUTE_RF); > > camera->setComputeNearFarMode(osg::CullSettings::DO_NOT_COMPUTE_NEAR_FAR); > camera->setRenderOrder(osg::Camera::POST_RENDER,0); > camera->setProjectionMatrixAsOrtho2D(0,width,height,0); > //camera->setViewMatrix(camera->getViewMatrix() * > osg::Matrixd::scale(1,-1.f,1)); > camera->getOrCreateStateSet()->setGlobalDefaults(); > camera->getOrCreateStateSet()->setMode(GL_BLEND, > osg::StateAttribute::ON); //blend > camera->getOrCreateStateSet()->setMode(GL_LIGHTING, > osg::StateAttribute::OFF | osg::StateAttribute::PROTECTED); > camera->getOrCreateStateSet()->setMode(GL_DEPTH_TEST, > osg::StateAttribute::OFF); > camera->getOrCreateStateSet()->setMode(GL_ALPHA_TEST, > osg::StateAttribute::OFF); > camera->getOrCreateStateSet()->setMode(GL_FOG, > osg::StateAttribute::OFF); > > > > and added to the rootNode: > > > Code: > renderManager->getRootNode()->addChild(guiManager->getGUICamera()); > > > > Then everything that is added to the list of gui elements is added to this > camera: > > > Code: > element->addToParent(GUICamera,1); > > > > see this simple class: > > > Code: > GUIElement::GUIElement(int x, int y, int width, int height): > x(x), y(y), width(width), height(height), depth(0) > { > createOSGNodes(); > } > > > GUIElement::~GUIElement(void) > { > } > > void GUIElement::createOSGNodes() > { > transform = new osg::MatrixTransform; > widthUniform = new osg::Uniform( "width", (float)width); > heightUniform = new osg::Uniform( "height", (float)height); > transform->getOrCreateStateSet()->addUniform(widthUniform); > transform->getOrCreateStateSet()->addUniform(heightUniform); > } > > void GUIElement::addToParent(osg::ref_ptr<osg::Group> parent, int depth) > { > this->depth = depth; > > transform->getOrCreateStateSet()->setRenderBinDetails(depth,"RenderBin"); > transform->setMatrix( osg::Matrix::translate(osg::Vec3(x,y,0))); > parent->addChild(transform); > } > > > > then I have these derived classes GUICanvas and GUIPanel. GUICanvas makes > a camera and attaches a framebuffer to render it to, and this framebuffer > is rendered using a quad (which is attached to the GUI camera) > > Creating the camera for the canvas: > > > Code: > osg::ref_ptr<osg::Camera> camera = new osg::Camera(); > camera->setViewport(new osg::Viewport(0,0,width,height)); > camera->setClearMask(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); > camera->setReferenceFrame(osg::Transform::ABSOLUTE_RF); > camera->setClearColor(osg::Vec4(1,0,1,1)); > camera->setRenderOrder(osg::Camera::PRE_RENDER,0); > camera->setProjectionMatrixAsOrtho2D(0,width,height,0); > camera->getOrCreateStateSet()->setGlobalDefaults(); > camera->getOrCreateStateSet()->setMode(GL_BLEND, > osg::StateAttribute::ON); //blend > camera->getOrCreateStateSet()->setMode(GL_LIGHTING, > osg::StateAttribute::OFF); > camera->getOrCreateStateSet()->setMode(GL_DEPTH_TEST, > osg::StateAttribute::OFF); > //camera->getOrCreateStateSet()->setMode(GL_ALPHA_TEST, > osg::StateAttribute::OFF); > //camera->getOrCreateStateSet()->setMode(GL_FOG, > osg::StateAttribute::OFF); > > camera->setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT); > > camera->attach(osg::Camera::BufferComponent(osg::Camera::COLOR_BUFFER0), > texture); > > > > > creating the texture for the canvas: > > > Code: > osg::ref_ptr<osg::TextureRectangle> rect = new osg::TextureRectangle(); > rect->setTextureSize(width, height); > rect->setInternalFormat(GL_RGBA8); > rect->setSourceFormat(GL_RGBA); > rect->setSourceType(GL_BYTE); > > rect->setFilter(osg::TextureRectangle::MIN_FILTER,osg::TextureRectangle::NEAREST); > > rect->setFilter(osg::TextureRectangle::MAG_FILTER,osg::TextureRectangle::NEAREST); > > > > and this is the code for making the quad: > > > Code: > osg::ref_ptr<osg::Geode> geode = new osg::Geode(); > geode->getOrCreateStateSet()->setMode(GL_LIGHTING, > osg::StateAttribute::OFF); > osg::ref_ptr<osg::Geometry> geom = new osg::Geometry(); > geom->setSupportsDisplayList(false); > osg::ref_ptr<osg::Vec3Array> vertices = new osg::Vec3Array; > osg::ref_ptr<osg::Vec2Array> texcoords = new osg::Vec2Array; > vertices->push_back(osg::Vec3d(0,0,0)); > texcoords->push_back(osg::Vec2(0,height)); > vertices->push_back(osg::Vec3d(0,height,0)); > texcoords->push_back(osg::Vec2(0,0)); > vertices->push_back(osg::Vec3d(width,height,0)); > texcoords->push_back(osg::Vec2(width,0)); > vertices->push_back(osg::Vec3d(width,0,0)); > texcoords->push_back(osg::Vec2(width,height)); > osg::ref_ptr<osg::Vec4Array> colors = new osg::Vec4Array; > colors->push_back(color); > geom->setVertexArray(vertices); > geom->setTexCoordArray(0,texcoords); > geom->setColorArray(colors); > geom->setColorBinding(osg::Geometry::BIND_OVERALL); > geom->addPrimitiveSet(new > osg::DrawArrays(osg::PrimitiveSet::QUADS,0,vertices->size())); > geode->addDrawable(geom); > > > > > and this is how I add a label: > > > Code: > osg::ref_ptr<osgText::Text> label = new osgText::Text(); > label->setCharacterSize(20); > //label->setFont("fonts/arial.ttf"); > label->setFont("fonts/arial.ttf"); > //label->setCharacterSizeMode(osgText::Text::CharacterSizeMode:: > //label->setFontResolution(100,100); > //label->set > label->setColor(osg::Vec4(1, 0.5, 0 ,1)); > //osg::ref_ptr<osgText::Style> style = new osgText::Style; > //style->setBevel(NULL); > //style->setThicknessRatio(0); > //label->setStyle(style); > //label->setBackdropType(osgText::Text::BackdropType::OUTLINE); > //label->setBackdropImplementation(osgText::Text::NO_DEPTH_BUFFER); > //label->setBackdropOffset(0.1, 0.1); > > > label->setText(text); > label->setAxisAlignment(osgText::Text::XY_PLANE); > osg::ref_ptr<osg::Geode> labelGeode= new osg::Geode(); > labelTransform->setMatrix( osg::Matrix::scale(1,-1,1)); > labelGeode->addDrawable(label); > labelTransform->addChild(labelGeode); > transform->addChild(labelTransform); //transform is the basic > translation matrix for positioning the elements on the GUI > > > > > So now it is: > > Rootnode has: worldCamera, waterCamera, screenQuatGeode and GUICamera > > now GUI camera has: Label, CanvasCamera, canvasQuat > canvascamera has: label (and a quad for the background, that is created > with the same function as shown above). > > This is really all there is to it afaik. I also tried removing the main > scene and only rendering the GUI, but that gave the same results. > > I hope this code gives enough information. > > Thanks! > > Bram > > ------------------ > Read this topic online here: > http://forum.openscenegraph.org/viewtopic.php?p=60364#60364 > > > > > > _______________________________________________ > osg-users mailing list > [email protected] > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > -- trajce nikolov nick
_______________________________________________ osg-users mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

