其他分享
首页 > 其他分享> > osg中文显示

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