osg顯示文字

2021-08-31 09:45:14 字數 1707 閱讀 6795

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

1、編譯好的osg居然缺少外掛程式,一看果然少了osgdb_freetype外掛程式;

2、中午字型無法顯示,最後查到是需要轉成寬位元組。

以下是text文字節點的相關屬性和設定,字型設定那裡,有些字型不能顯示中文是正常的,建議使用「simhei.ttf」

osg::ref_ptrfont = osgtext::readfontfile("fonts/simhei.ttf");  //文字使用字型

//test文字節點

osg::ref_ptrtext = 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

//第一種轉換成寬位元組

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);//設定顯示的文字

osg漢字顯示

osg中顯示漢字應該不是什麼很難的事情 text settext l 我愛中國 一般是在漢字前加上乙個大寫的l,這樣就把漢字字元變成寬字元,就可以顯示了,寬字元就是乙個字是多個字元構成的 但是在漢字需要動態顯示的時候,這種加l的方法就懵逼了 網上有個帖子給出的 但本人親試發現不行,後來改了一下 vo...

osg 中顯示中文字元出現亂碼問題

osg中建立字型函式 osg node createtext wchar t str,double pos 3 double rgba 4 int textsize char textname 呼叫建立字型函式 void osgcreatetext char str,double pos 3 dou...

OSG和osgearth顯示中文

做osg相關的專案有一段時間了,一直想寫幾篇這方面的博文,今天終於開始了。今天主要介紹一下怎麼解決osg 和osgearth中顯示中文的的問題,這個問題我反覆遇到讓我很是糾結啊。一 知識儲備 要想很好的理解和解決這個問題,首先要了解什麼是多位元組和寬位元組。說實話我之前也知道這兩個位元組到底有什麼區...