青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

       OpenGl下可以方便的操作字符,但是對字符串顯示的支持不夠.OpenGL本身不提供文字的顯示和處理能力,如要顯示文字的借助于第三方的擴展程序。初涉OpenGl, 想請教有什么好的方法可以解決這個問題?網上覓得bluebohe三年前的一篇文章, 在vs2005下實現他的代碼, 編譯通過了, 但是結果顯示不出來. 可否幫忙看看? COpenGLText源碼
bluebohe的原文:
      一直以來,OpenGL狀態下的文字顯示都是一個問題,本文使用嵌套顯示列表的方式進行OpenGL狀態下的字符串的顯示。
     有以下幾點需要注意:

     1:本程序顯示按照給定的高度和文字的位置顯示某一種字體的文字,其中一些字體的參數定義在OpenGLText內部給定,可以隨意將它抽出來。如果將代碼用于實際應用中,建議文字的文字間距自己設定,也可以隨意添加文字的傾斜角、旋轉角度、定位方式等等參數。

     2:wglUseFontOutlines函數的第五個參數表示文字的精度(弦偏差),一般設置成零,但這樣缺省的做法會導致文字太粗糙,可以將它設置成一個比較小的數,以提高文字顯示的精確度,但這樣會增加內存的占用量。

     3:如果文字的高度比較小,文字的線條可能會出現斷裂的現象,影響美觀,解決這類問題有以下幾種方式:(1)使用OpenGL反走樣技術;(2)把文字的輪廓用線條勾勒出來;(3)在文字的Draw成員函數中多次調用glCallList函數,每次調用向周圍平移一個像素,這樣的話會使文字的線條斷裂問題大為改觀,速度也是三種方式中最快的。

應用方式如下:

         COpenGLText text;
         COpenGLText text2;

         text2.m_dX=0;
         text2.m_dY=200;

         glLoadIdentity(); 
         glClear(GL_COLOR_BUFFER_BIT); 
         glColor4f(0.0f, 0.0f, 1.0f, 1.0f);

         text.Draw("宋體");
         text2.Draw("楷體_GB2312");

         glFlush();

類的聲明和實現如下:

  1#include <string>
  2#include <GL/glut.h>
  3
  4using namespace std;
  5
  6class COpenGLText  
  7{
  8public:
  9
 10    //構造文字
 11    COpenGLText();
 12    virtual ~COpenGLText();
 13
 14    //繪制制定字體的文字,字體只在第一次繪制時進行設置,之后可以傳入空值
 15    void Draw(char *strFontName);
 16
 17    //釋放文字所占空間
 18    void Free();
 19    //文字字符串
 20    string m_str;
 21    //字符串高度
 22    double m_dHeight;
 23    //字符串位置
 24    double m_dX;
 25    double m_dY;
 26
 27protected:
 28    BOOL GenList();
 29    BOOL GenCharsLists(char *strFontName);
 30    int m_iDisplayList;
 31}
;
 32
 33//////////////////////////////////////////////////////////////////////
 34
 35// COpenGLText Class
 36
 37//////////////////////////////////////////////////////////////////////
 38
 39//////////////////////////////////////////////////////////////////////

 40
 41// Construction/Destruction
 42
 43//////////////////////////////////////////////////////////////////////
 44
 45COpenGLText::COpenGLText()
 46{
 47    m_dX=0;
 48    m_dY=0;
 49    m_str="abc中國";
 50    m_dHeight=100;
 51    m_iDisplayList=0;
 52}

 53
 54COpenGLText::~COpenGLText()
 55{
 56    Free();
 57}

 58
 59BOOL COpenGLText::GenCharsLists(char *strFontName)
 60{
 61    HDC hdc;
 62    const char *str=m_str.c_str()
 63    hdc=CreateDC( "DISPLAY""""", NULL );
 64    int iNum=_mbslen((const unsigned char *)str);
 65
 66    m_iDisplayList=glGenLists(iNum+1);     
 67    HFONT hNewCFont;
 68    LOGFONT CLogFont; //存儲當前字體參數
 69
 70    //初始化字體參數
 71
 72    memset( &CLogFont, 0sizeof(LOGFONT) );     
 73    CLogFont.lfEscapement = CLogFont.lfOrientation = 0;
 74    CLogFont.lfWeight = FW_NORMAL;
 75    CLogFont.lfCharSet =  GB2312_CHARSET;
 76    CLogFont.lfOutPrecision = OUT_DEFAULT_PRECIS;
 77    CLogFont.lfQuality=DEFAULT_QUALITY;
 78    CLogFont.lfPitchAndFamily = DEFAULT_PITCH | FF_SWISS;
 79    strcpy( CLogFont.lfFaceName, LPCTSTR(strFontName) );
 80    CLogFont.lfHeight=-10;
 81    CLogFont.lfWidth=0;     
 82
 83    hNewCFont=CreateFontIndirect(&CLogFont);
 84    HFONT hOldFont=(HFONT)SelectObject(hdc,hNewCFont);
 85
 86    int i=0,j=0,iTotal=strlen(str);;
 87    UINT nChar=0;
 88
 89    while(i<iTotal)
 90    {
 91        j++;
 92
 93        if(IsDBCSLeadByte(str[i]))
 94        {
 95            nChar=((unsigned char)str[i])*0x100+(unsigned char)str[i+1];
 96            i+=2;
 97        }

 98        else
 99        {
100            nChar=str[i];
101            i++;
102
103        }

104        GLYPHMETRICSFLOAT agmf[1];
105        BOOL bOK=wglUseFontOutlines(hdc,nChar,1,m_iDisplayList+j,0.002f,0,WGL_FONT_POLYGONS,agmf);
106
107    }

108
109    SelectObject(hdc,hOldFont);
110    DeleteObject(hNewCFont);
111    DeleteDC(hdc);
112
113    return TRUE;
114
115}

116
117BOOL COpenGLText::GenList()
118{
119    int iNum=_mbslen((const unsigned char *)m_str.c_str());
120    glNewList( m_iDisplayList, GL_COMPILE);
121
122    for(int i=1;i<=iNum;i++)
123    {
124
125        glPushMatrix();
126
127        //此處修改文字間距
128
129        glTranslated(m_dX+m_dHeight*(i-1),m_dY,0);
130
131        glScaled(m_dHeight,m_dHeight,1);
132
133        glCallList(m_iDisplayList+i);
134
135        glPopMatrix();
136
137    }

138    glEndList();
139
140    return TRUE;
141}

142
143void COpenGLText::Free()
144{
145    if(glIsList(m_iDisplayList))
146        glDeleteLists(m_iDisplayList,_mbslen((const unsigned char *)m_str.c_str())+1);
147    m_iDisplayList=0;
148}
 
149
150void COpenGLText::Draw(char *strFontName)
151{
152    if(!glIsList(m_iDisplayList))
153    {
154        GenCharsLists(strFontName);
155        GenList();
156    }

157    glCallList(m_iDisplayList);
158}

159
posted on 2007-04-12 15:26 哈哈 閱讀(3774) 評論(2)  編輯 收藏 引用

評論:
# re: 請教:OpenGl中的文字顯示 2007-05-25 22:20 | shpb
可以顯示  回復  更多評論
  
# re: 請教:OpenGl中的文字顯示 2007-05-26 21:17 | pengkuny
可以嗎?怎么應用,在什么環境下應用
望shpb賜教  回復  更多評論
  

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲每日在线| 欧美一区二区三区免费视频 | 欧美国产综合| 亚洲人精品午夜在线观看| 久久综合一区二区| 久久婷婷丁香| 日韩系列在线| 宅男精品视频| 国产日韩欧美视频| 久热这里只精品99re8久| 久久久久久久一区| 亚洲免费电影在线| 一本不卡影院| 国产一区二区在线观看免费播放| 久久电影一区| 久久免费视频在线| 一区二区三区久久精品| 亚洲一区三区视频在线观看| 国产一区二区日韩精品| 欧美激情视频一区二区三区在线播放| 欧美激情免费在线| 午夜老司机精品| 久久久久高清| 一区二区三区精品视频| 欧美亚洲三区| 亚洲久色影视| 欧美亚洲一区| 一区二区激情| 久久久精品国产免大香伊 | 免费一区二区三区| 在线视频精品| 久久久久久久一区二区三区| 一区二区高清在线| 久久精品视频在线| 亚洲午夜国产一区99re久久| 久久精品视频播放| 在线亚洲精品| 免费欧美在线| 久久久久久黄| 国产精品久久久久99| 乱码第一页成人| 国产精品综合视频| 亚洲伦伦在线| 亚洲缚视频在线观看| 亚洲欧美美女| 亚洲小视频在线观看| 欧美a级片网| 久久噜噜噜精品国产亚洲综合| 欧美日韩精品二区| 欧美电影资源| 极品少妇一区二区三区精品视频| 一本色道久久综合狠狠躁篇的优点| 亚洲经典三级| 久久久久青草大香线综合精品| 欧美亚洲视频在线观看| 欧美日韩综合久久| 亚洲精品国产精品国自产在线| 国产在线观看一区| 午夜国产不卡在线观看视频| 午夜免费日韩视频| 亚洲欧美日韩爽爽影院| 欧美日韩日本视频| 午夜精品在线看| 亚洲精选国产| 欧美搞黄网站| 亚洲激情网站| 99在线精品视频在线观看| 久久综合九色综合欧美就去吻 | 狠狠综合久久| 久久国产视频网| 久久伊伊香蕉| 亚洲国产成人不卡| 蜜臀av国产精品久久久久| 另类酷文…触手系列精品集v1小说| 国产欧美一区二区在线观看| 亚洲先锋成人| 久久精品国产亚洲5555| 国产一区二区三区在线观看免费视频 | 欧美三级黄美女| 在线免费一区三区| 欧美亚洲一级片| 久久在线免费视频| 在线欧美小视频| 免费在线观看精品| 麻豆成人综合网| 亚洲日本在线视频观看| 蜜臀久久99精品久久久久久9| 亚洲国产精品日韩| 日韩亚洲欧美中文三级| 欧美午夜电影完整版| 亚洲视频精选| 亚洲欧美日韩在线高清直播| 国产日韩欧美成人| 久久午夜av| 亚洲毛片在线| 先锋资源久久| 亚洲电影毛片| 国产精品电影网站| 久久精品夜色噜噜亚洲a∨| 欧美高清视频免费观看| 一本色道精品久久一区二区三区 | 久久精品一区二区国产| 欧美成人精品福利| 亚洲一区二区在线看| 国产一区二区成人| 免费久久精品视频| 亚洲女女女同性video| 欧美gay视频| 亚洲欧美在线播放| 亚洲日本中文字幕免费在线不卡| 国产精品国产福利国产秒拍| 欧美综合第一页| 99国内精品| 欧美成人精品h版在线观看| 亚洲男人av电影| 亚洲精品在线免费观看视频| 国产欧美日韩中文字幕在线| 欧美国产欧美亚州国产日韩mv天天看完整| 亚洲精品日韩在线观看| 久久女同互慰一区二区三区| 亚洲一区999| 91久久综合| 韩日午夜在线资源一区二区| 国产精品草草| 欧美成人午夜影院| 欧美制服丝袜第一页| 亚洲网站在线播放| 亚洲精品少妇30p| 欧美国产日韩一区二区在线观看 | 一本色道久久88综合日韩精品| 国产午夜精品全部视频播放| 欧美日韩免费视频| 欧美国产亚洲视频| 久久一区视频| 久久久一本精品99久久精品66| 亚洲午夜在线观看视频在线| 一本久久a久久免费精品不卡| 亚洲国产电影| 欧美风情在线观看| 开心色5月久久精品| 欧美一区二区三区视频在线观看| 这里只有精品电影| 亚洲精品中文字幕在线观看| 亚洲日本va午夜在线电影| 在线看片日韩| 在线观看一区| 亚洲国产精品一区二区久| 狠狠色香婷婷久久亚洲精品| 国产综合一区二区| 国产一区二区三区av电影 | 欧美视频二区| 欧美日韩国产免费观看| 欧美精品在线免费| 欧美日韩美女| 国产精品网站在线| 国产日韩欧美综合一区| 国产三区精品| 一区二区三区亚洲| 亚洲国产精品一区二区第一页| 亚洲激情二区| 亚洲图片你懂的| 久久国产毛片| 欧美xx视频| 亚洲经典在线看| 亚洲香蕉成视频在线观看| 午夜精品久久久久久久久久久| 久久高清免费观看| 嫩模写真一区二区三区三州| 欧美日韩大片| 国产欧美一区二区三区在线看蜜臀 | 欧美影院视频| 欧美成人免费网站| 欧美天堂亚洲电影院在线观看 | 久久国产精品99国产精| 久久久www成人免费无遮挡大片| 欧美v亚洲v综合ⅴ国产v| 欧美日韩免费在线| 国产欧美日韩精品一区| 亚洲国产高清视频| 亚洲在线第一页| 麻豆精品一区二区av白丝在线| 91久久久久久国产精品| 亚洲自拍偷拍福利| 蜜桃久久精品一区二区| 国产精品久久久久一区二区| 永久域名在线精品| 亚洲视频一区| 欧美成人精品| 亚洲欧美日本日韩| 免费看黄裸体一级大秀欧美| 国产精品自拍在线| 亚洲乱码国产乱码精品精天堂 | 欧美国产日韩a欧美在线观看| 日韩性生活视频| 久久一区二区三区av| 国产精品久久国产精品99gif| 亚洲国产午夜| 久久久www成人免费精品| 一本色道久久88综合日韩精品| 久久激情五月婷婷|