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

       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 哈哈 閱讀(3772) 評論(2)  編輯 收藏 引用

評論:
# re: 請教:OpenGl中的文字顯示 2007-05-25 22:20 | shpb
可以顯示  回復  更多評論
  
# re: 請教:OpenGl中的文字顯示 2007-05-26 21:17 | pengkuny
可以嗎?怎么應用,在什么環境下應用
望shpb賜教  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产日韩在线视频| 日韩一本二本av| 久久福利毛片| 夜夜嗨av色一区二区不卡| 欧美性一二三区| 久久久久久一区| 久久激情五月激情| 午夜精品久久久久久久99水蜜桃| 亚洲国产精品一区制服丝袜 | 加勒比av一区二区| 国产精品久久午夜夜伦鲁鲁| 欧美成人高清| 久久综合99re88久久爱| 欧美综合第一页| 久久经典综合| 亚洲人成亚洲人成在线观看图片 | 亚洲人成亚洲人成在线观看| 好吊日精品视频| 国产精品免费aⅴ片在线观看| 久久久久.com| 中文网丁香综合网| 香港久久久电影| 久久精品免费观看| 美腿丝袜亚洲色图| 欧美三级日韩三级国产三级| 欧美先锋影音| 国产午夜精品视频| 在线观看av一区| 亚洲国产成人久久综合| 亚洲片在线观看| 亚洲图片欧洲图片日韩av| 亚洲一区二区三区在线视频| 亚洲图片欧美一区| 午夜影视日本亚洲欧洲精品| 亚洲图片欧洲图片av| 99精品国产热久久91蜜凸| 在线中文字幕不卡| 正在播放欧美视频| 久久久亚洲影院你懂的| 蜜臀久久99精品久久久画质超高清 | 欧美91大片| 亚洲美女视频在线观看| 亚洲综合精品| 久久久综合网| 欧美日韩国产美女| 欧美色欧美亚洲另类二区| 国产偷自视频区视频一区二区| 亚洲激情在线观看视频免费| 亚洲一区二区三区精品视频 | 国产精品美女久久福利网站| 影音先锋中文字幕一区| 亚洲私人影院在线观看| 久久综合色天天久久综合图片| 亚洲人成在线观看| 午夜影院日韩| 久久尤物视频| 可以看av的网站久久看| 国产精品乱码一区二三区小蝌蚪 | 欧美精品一区二区精品网| 国产乱人伦精品一区二区| 亚洲精品综合在线| 久久午夜视频| 亚洲免费视频网站| 欧美日韩亚洲一区二区三区在线| 激情一区二区三区| 欧美中文在线观看国产| 欧美大片免费久久精品三p | 夜夜嗨av一区二区三区中文字幕| 亚洲影音一区| 亚洲精品婷婷| 欧美国产激情| 亚洲高清久久久| 久久久99精品免费观看不卡| 亚洲天堂av高清| 国产精品白丝jk黑袜喷水| 好看的日韩av电影| 久久精品国产精品亚洲精品| 亚洲精选久久| 欧美日韩高清免费| 99国产一区| 国产精品视频福利| 免费在线日韩av| 久久激情视频久久| 国外成人在线| 久久婷婷麻豆| 久久露脸国产精品| 在线观看福利一区| 欧美福利在线观看| 噜噜噜噜噜久久久久久91| 国内精品久久久久久久97牛牛| 久久精品视频免费| 久久不见久久见免费视频1| 欧美日韩一级视频| 亚洲女人天堂av| 午夜亚洲视频| 一区二区视频免费在线观看| 免费成人高清视频| 浪潮色综合久久天堂| 亚洲激情校园春色| 9国产精品视频| 国产欧美一区二区精品忘忧草| 久久国产欧美日韩精品| 99在线精品观看| 国产精品日韩在线播放| 久久亚洲一区二区| 99精品99| 欧美连裤袜在线视频| 亚洲欧美日韩一区| 久久久久久91香蕉国产| 日韩视频在线观看国产| 亚洲香蕉成视频在线观看| 精品69视频一区二区三区| 亚洲欧洲精品一区二区精品久久久| 欧美久久久久| 欧美一区2区三区4区公司二百| 欧美中文字幕在线播放| 在线观看欧美精品| 99国产精品视频免费观看| 国产一区99| 亚洲精品你懂的| 久久亚洲春色中文字幕| 一本色道久久综合亚洲精品不卡 | 久久久久久久综合日本| 玖玖国产精品视频| 亚洲欧美日韩另类| 欧美成人精品三级在线观看| 亚洲欧美电影在线观看| 久久精品视频播放| 亚洲综合色激情五月| 久久综合一区二区三区| 午夜精品网站| 欧美精品色综合| 欧美二区不卡| 国产日韩在线播放| 欧美在线一二三四区| 久久精品免费看| 国产亚洲欧洲| 久久精品成人| 老色批av在线精品| 亚洲国产导航| 欧美成人免费播放| 99精品视频免费观看| 亚洲欧洲日产国码二区| 尤物yw午夜国产精品视频明星| 亚洲一区免费| 欧美一区二区高清| 国产精品一区二区久久国产| 亚洲天堂网在线观看| 亚洲欧美在线一区二区| 国产精品爽黄69| 欧美一二区视频| 久久欧美肥婆一二区| 狠狠色丁香久久综合频道| 久久精品一区蜜桃臀影院| 欧美91精品| 在线亚洲一区二区| 国产精品久久久久久亚洲毛片| 亚洲综合精品四区| 蜜臀a∨国产成人精品| 亚洲激情社区| 国产精品国色综合久久| 欧美一区二区视频在线观看2020| 久久综合中文字幕| 日韩一区二区高清| 国产精品视频精品视频| 久久久国际精品| 亚洲精品午夜精品| 欧美在线国产| 亚洲人成欧美中文字幕| 欧美午夜精品久久久| 欧美在线黄色| 亚洲精品欧美极品| 久久精品1区| 亚洲精品免费看| 国产伦精品一区二区三| 麻豆久久婷婷| 性欧美超级视频| 亚洲精品裸体| 美女精品在线| 欧美一级网站| 夜夜狂射影院欧美极品| 国产一区视频观看| 欧美日韩国产一区二区三区地区| 欧美一区二区三区另类| 夜久久久久久| 亚洲成人自拍视频| 久久国产一区二区| 亚洲少妇在线| 亚洲国产精品一区二区www| 国产精品magnet| 欧美大片免费观看| 久久精品久久99精品久久| 一区二区三区波多野结衣在线观看| 久久夜色精品国产亚洲aⅴ| 亚洲午夜在线观看| 日韩天堂av| 亚洲精品视频中文字幕| 在线高清一区| 在线电影国产精品| 精品9999|