osg中文显示
作者:互联网
一、osgText::Text
void osgSimulate::addLabelName(osg::ref_ptr<osg::MatrixTransform> mtplane, const wchar_t* str)
{
const osg::BoundingSphere& bs = mtfly->getBound();
osgText::Text* text = new osgText::Text;
text->setPosition(bs.center());
//printf("%f %f %f\n", bs.center().x(), bs.center().y(), bs.center().z());
osg::ref_ptr<osgText::Font> font = new osgText::Font();
//读取字体
font = osgText::readFontFile("simhei.ttf");
// 设置字体文件
text->setFont(font.get());
// 设置文字信息
text->setText(str);
text->setAlignment(osgText::Text::RIGHT_BOTTOM);
//文字一直面向镜头
text->setAxisAlignment(osgText::Text::SCREEN);
//text->setBackdropType(osgText::Text::);
//text->setCharacterSize(400);
//text->setColor(osg::Vec4(1,0,0,1));
//text->setDrawMode(osgText::Text::TEXT | osgText::Text::ALIGNMENT | osgText::Text::BOUNDINGBOX);
//text->setBoundingBoxColor(osg::Vec4(1, 1, 1, 0));
//分辨率
//text->setFontResolution(100,10);
//设置固定尺寸
//text->setCharacterSizeMode(osgText::Text::OBJECT_COORDS);
//设置大小随视角缩放模式
text->setCharacterSizeMode(osgText::Text::SCREEN_COORDS);
//text->setCharacterSizeMode(osgText::Text::OBJECT_COORDS_WITH_MAXIMUM_SCREEN_SIZE_CAPPED_BY_FONT_HEIGHT);
osg::Geode* geode = new osg::Geode;
geode->addDrawable(text);
mtplane->addChild(geode);
}
用法
createLabel(116.0,40.0,0,L"坦克");
二、osgEarth::Symbology::Style
void osgSimulate::createLabel(double lng, double lat, double height, const std::wstring &str)
{
//添加标识
osgEarth::Symbology::Style style;
//设置对齐方式
style.getOrCreate<osgEarth::Symbology::TextSymbol>()->alignment() = osgEarth::Symbology::TextSymbol::ALIGN_CENTER_CENTER;
//设置字体颜色
//style.getOrCreate<osgEarth::Symbology::TextSymbol>()->fill()->color() = osgEarth::Symbology::Color();
//设置编码方式,有ASCII方式
style.getOrCreate<osgEarth::Symbology::TextSymbol>()->encoding() = osgEarth::Symbology::TextSymbol::ENCODING_UTF8;
//设置字体
style.getOrCreate<osgEarth::Symbology::TextSymbol>()->font() = "simhei.ttf";
std::string ch;
unicodeToUTF8(str, ch); //L表转宽字符
osgEarth::Annotation::PlaceNode *pn =
new osgEarth::Annotation::PlaceNode(mapNode, osgEarth::GeoPoint
(geoSRS, lng, lat, height, osgEarth::Util::ALTMODE_RELATIVE), ch, style);
root->addChild(pn);
}
osg::ref_ptr <osgEarth::MapNode> mapNode;
//世界坐标和经纬坐标SRS
const osgEarth::Util::SpatialReference* mapSRS;
const osgEarth::Util::SpatialReference* geoSRS;
mapNode = osgEarth::MapNode::findMapNode(earth);
mapSRS = mapNode->getMapSRS();
geoSRS = mapSRS->getGeographicSRS();
用法
addLabelName(mtfly, L"飞机1 ");
三、结果展示
标签:中文,osgText,text,显示,osgEarth,Text,style,osg 来源: https://blog.csdn.net/ljjjjjjjjjjj/article/details/121733646