osg顯示文字

在osg中顯示文字的時候,遇到了兩個問題:

1、編譯好的osg居然缺少插件,一看果然少了osgdb_freetype插件;

2、中午字體無法顯示,最後查到是需要轉成寬字節。

 

以下是Text文本節點的相關屬性和設置,字體設置那裏,有些字體不能顯示中文是正常的,建議使用“simhei.ttf”

osg::ref_ptr<osgText::Font> font = osgText::readFontFile("fonts/simhei.ttf");  //文本使用字體
//test文本節點
osg::ref_ptr<osgText::Text>text = new osgText::Text; 	
text->setFont(font);//設置字體樣式
text->setCharacterSize(size);//字體大小
text->setPosition(pos);  //設置字體放置位置
text->setColor(osg::Vec4(1.0,1.0,1.0,1.0));  //設置字體顏色
text->setAlignment(osgText::Text::CENTER_BOTTOM);//文字顯示方向
//text->setAxisAlignment(osgText::Text::SCREEN);//獲取文字對稱成方式正對屏幕方向
//text->setCharacterSizeMode(osgText::Text::SCREEN_COORDS);//跟隨視角不斷變化,離物體越遠,文字越大
text->setAutoRotateToScreen(true);//跟隨視角不斷變化,但離物體越遠,文字越小,和現實當中像類似
text->setBackdropType(osgText::Text::OUTLINE);//對文字進行描邊
text->setBackdropColor(osg::Vec4(1.0,0.0,0.0,1.0));//描邊顏色
text->setDrawMode(osgText::Text::TEXT | osgText::Text::BOUNDINGBOX);//添加文字邊框
text->setAxisAlignment(osgText::Text::XZ_PLANE);//獲取文字對稱成方式 

將char轉換成wchar即轉換成寬字節,需要注意的是要引入頭文件#include<window.h>

//第一種轉換成寬字節
int requiredSize=mbstowcs(NULL,string,0);//如果mbstowcs第一參數爲NULL那麼返回字符串的數目
wchar_t* wText=new wchar_t[requiredSize+1];
mbstowcs(wText,string,requiredSize+1);//由char轉換成wchar類型
text.setText(wText);
delete wText;   

//第二種轉換成寬字節
char *data1 = "滑坡體長約300米";
DWORD len1 = MultiByteToWideChar(CP_ACP, 0, data1, -1, NULL, 0);//得到data的字節數
TCHAR *des1 = new TCHAR[len1];
MultiByteToWideChar(CP_ACP, 0, data1, -1, des1, len1);
text1->setText(des1);//設置顯示的文字

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章