Hi, Thx Robert! I use one of osgEarth fuction to rendering my text.
Code: osg::ref_ptr<osgText::Text> PowerPlaceNode::createPlaceNodeTextDrawable(const std::string& text, const TextSymbol* symbol, const osg::Vec3& positionOffset) { osg::ref_ptr < osgText::Text > t = new osgText::Text(); osgText::String::Encoding text_encoding = osgText::String::ENCODING_UNDEFINED; if (symbol && symbol->encoding().isSet()) { switch (symbol->encoding().value()) { case TextSymbol::ENCODING_ASCII: text_encoding = osgText::String::ENCODING_ASCII; break; case TextSymbol::ENCODING_UTF8: text_encoding = osgText::String::ENCODING_UTF8; break; case TextSymbol::ENCODING_UTF16: text_encoding = osgText::String::ENCODING_UTF16; break; case TextSymbol::ENCODING_UTF32: text_encoding = osgText::String::ENCODING_UTF32; break; default: text_encoding = osgText::String::ENCODING_UTF8; break; //editby lvqing 20140509 } } t->setText(text, osgText::String::ENCODING_UTF8); if (symbol && symbol->pixelOffset().isSet()) { t->setPosition( osg::Vec3(positionOffset.x() + symbol->pixelOffset()->x(), positionOffset.y() + symbol->pixelOffset()->y(), positionOffset.z())); } else { t->setPosition(positionOffset); } osgText::Font* font = 0L; if (symbol && symbol->font().isSet()) { font = osgText::readFontFile(*symbol->font()); // read font*/ } t->setFontResolution(256,256); t->setAutoRotateToScreen(false); t->setCharacterSizeMode(osgText::Text::OBJECT_COORDS); if (symbol != NULL) { if (symbol->size() != NULL) { t->setCharacterSize( symbol && symbol->size().isSet() ? *symbol->size() : 20.0f ); } else { t->setCharacterSize( 20.0f ); } } if (!font) font = Registry::instance()->getDefaultFont(); if (font) { t->setFont(font); } t->setColor(symbol && symbol->fill().isSet() ? symbol->fill()->color() : Color::White); if (symbol) { // they're the same enum. osgText::Text::AlignmentType at = (osgText::Text::AlignmentType) symbol->alignment().value(); t->setAlignment(at); } if (symbol && symbol->halo().isSet()) { t->setBackdropColor(symbol->halo()->color()); t->setBackdropType(osgText::Text::OUTLINE); if (symbol->haloOffset() != NULL) { if (symbol->haloOffset().isSet()) { t->setBackdropOffset(*symbol->haloOffset(), *symbol->haloOffset()); } } } else if (!symbol) { // if no symbol at all is provided, default to using a black halo. t->setBackdropColor(osg::Vec4(.3, .3, .3, 1)); t->setBackdropType(osgText::Text::OUTLINE); } // this disables the default rendering bin set by osgText::Font. Necessary if we're // going to do decluttering. // TODO: verify that it's still OK to share the font stateset (think so) or does it // need to be marked DYNAMIC if (t->getStateSet()) t->getStateSet()->setRenderBinToInherit(); //osg::StateSet* stateSet = new osg::StateSet(); //t->setStateSet( stateSet ); //#if 0 // OBE: the decluttering bin is now set higher up (in OrthoNode) osg::StateSet* stateSet = t->getOrCreateStateSet(); if ( symbol && symbol->declutter().isSet() ) { Decluttering::setEnabled( stateSet, *symbol->declutter() ); } else { // stateSet->setRenderBinToInherit(); stateSet->setMode(GL_LIGHTING,osg::StateAttribute::OFF); } t->setStateSet( stateSet ); #if 0 // OBE: shadergenerator now takes care of all this // add the static "isText=true" uniform; this is a hint for the annotation shaders // if they get installed. static osg::ref_ptr<osg::Uniform> s_isTextUniform = new osg::Uniform(osg::Uniform::BOOL, UNIFORM_IS_TEXT()); s_isTextUniform->set( true ); stateSet->addUniform( s_isTextUniform.get() ); #endif return t; } ... Thank you! Cheers, Lv ------------------ Read this topic online here: http://forum.openscenegraph.org/viewtopic.php?p=70488#70488 _______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org