ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

osg中文显示

2021-12-05 19:31:08  阅读:388  来源: 互联网

标签:中文 osgText text 显示 osgEarth Text style 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有