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

       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>
            一区二区欧美亚洲| 性欧美精品高清| 国产一区二区三区在线观看视频 | 亚洲影院一区| 国产精品国产三级国产a| 免费不卡亚洲欧美| 99re6热在线精品视频播放速度| 久久精品人人做人人爽电影蜜月 | 久久人人爽人人| 日韩视频免费在线观看| 国产精品久久久一区二区三区| 亚洲日韩视频| 亚洲激情午夜| 亚洲精品美女免费| 怡红院av一区二区三区| 国产亚洲欧美另类中文| 久久久久国产精品人| 一区二区高清在线观看| av不卡在线观看| 亚洲自啪免费| a4yy欧美一区二区三区| 一区二区三区波多野结衣在线观看| 一区二区三区国产盗摄| 一本久道久久综合婷婷鲸鱼| 亚洲国产一区在线| 亚洲看片网站| 久久精品最新地址| 亚洲精品在线看| 亚洲一区二区三区在线| 亚洲一区二区免费| 欧美精品一区二区视频| 国产精品揄拍500视频| 精品二区视频| 久久精品五月婷婷| 亚洲第一视频| 亚洲国产成人porn| 欧美激情国产日韩| 小处雏高清一区二区三区| 欧美日本一区| 亚洲激情视频在线| 亚洲免费视频成人| 欧美一区国产在线| 亚洲六月丁香色婷婷综合久久| 国内精品国语自产拍在线观看| 亚洲精品资源美女情侣酒店| 最新日韩在线视频| 午夜在线精品| 欧美日本在线看| 在线播放国产一区中文字幕剧情欧美| 亚洲图片你懂的| 一区二区国产精品| 欧美天堂在线观看| 午夜精品www| 性色av香蕉一区二区| 国产乱码精品一区二区三区忘忧草| 在线色欧美三级视频| 久久久xxx| 亚洲精品国产精品久久清纯直播| 欧美在线在线| 欧美日韩亚洲系列| 亚洲破处大片| 久久精品国产精品亚洲| 9l视频自拍蝌蚪9l视频成人| 久久免费高清| 精品二区视频| 夜夜嗨av色综合久久久综合网| 午夜亚洲福利| 亚洲欧洲一区二区三区| 久久视频在线免费观看| 一本色道久久88亚洲综合88| 亚洲午夜av在线| 欧美一区二区三区在线看| 欧美日韩国产欧美日美国产精品| 亚洲调教视频在线观看| 午夜精品在线| 国产一区二区三区网站 | 欧美在线观看一区二区| 亚洲国产女人aaa毛片在线| 欧美在线看片a免费观看| 亚洲第一页自拍| 亚洲香蕉伊综合在人在线视看| 国模精品娜娜一二三区| 亚洲午夜一区二区| 一本色道久久综合亚洲精品不| 欧美亚洲在线播放| 亚洲欧美日韩国产一区| 欧美日韩成人一区二区三区| 亚洲精品乱码久久久久久按摩观| 午夜久久久久久久久久一区二区| 麻豆精品一区二区综合av| 9色国产精品| 欧美精品1区2区| 久久精品最新地址| 欧美日韩国产电影| 日韩午夜免费视频| 99热免费精品| 国产精品成人一区二区三区夜夜夜| 亚洲激情在线| 亚洲综合三区| 国产区精品在线观看| 狼人天天伊人久久| 欧美在线视频免费| 亚洲高清中文字幕| 欧美日韩一区国产| 欧美在线日韩精品| 亚洲国产一区二区a毛片| 日韩视频一区| 黑人巨大精品欧美一区二区小视频 | 鲁鲁狠狠狠7777一区二区| 亚洲国产精品久久久| 国产精品啊v在线| 久久婷婷久久| 亚洲欧洲精品天堂一级| 日韩视频免费观看| 国产夜色精品一区二区av| 久久经典综合| 日韩视频一区二区三区在线播放免费观看 | 亚洲图片激情小说| 欧美成人自拍| 久久久久国产精品一区三寸| 一本色道久久综合狠狠躁篇的优点| 国产一区二区三区成人欧美日韩在线观看 | 欧美日韩精品伦理作品在线免费观看| 夜夜嗨av色一区二区不卡| 亚洲精品一区二区在线| 国产欧美在线| 国产乱码精品一区二区三区不卡 | 久久精品成人| 欧美一区二区三区男人的天堂| 亚洲成人资源| 一本大道av伊人久久综合| 欧美午夜不卡在线观看免费| 国产精品久久久一本精品| 亚洲激情成人| 欧美成人69| 久久久久久网站| 欧美亚洲免费电影| 亚洲一区欧美二区| 日韩午夜av电影| 亚洲精品视频在线看| 夜夜嗨av色综合久久久综合网| 欧美日在线观看| 国产午夜精品全部视频在线播放| 国产亚洲成精品久久| 亚洲第一在线视频| 欧美一级片一区| 日韩视频在线免费观看| 久久精品国产亚洲高清剧情介绍 | 最新国产成人在线观看| 亚洲国产精彩中文乱码av在线播放| 91久久线看在观草草青青| 亚洲影视综合| 欧美精品观看| 好吊视频一区二区三区四区| 妖精视频成人观看www| 美女诱惑一区| 亚洲欧美日韩在线播放| 久久久青草婷婷精品综合日韩| 欧美a级大片| 在线一区免费观看| 亚洲人体一区| 欧美日韩精品一区二区在线播放| 韩国v欧美v日本v亚洲v| 欧美一区网站| 欧美激情精品久久久久久免费印度| 亚洲美女色禁图| 午夜视频在线观看一区| 一区二区三区视频免费在线观看| 亚洲香蕉伊综合在人在线视看| 在线日韩欧美视频| 中文亚洲免费| 99精品免费视频| 欧美成人免费视频| 女同性一区二区三区人了人一| 欧美视频久久| 亚洲国产精品电影在线观看| 国产精品久久久久久影院8一贰佰| 久久综合国产精品| 国外成人免费视频| 久久久www| 欧美日韩国产成人高清视频| 免费观看久久久4p| 国产在线高清精品| 亚洲欧美成人综合| 久久久欧美精品| 揄拍成人国产精品视频| 久久久五月天| 男人的天堂成人在线| 在线观看视频一区二区| 欧美激情片在线观看| 亚洲专区在线| 亚洲第一区中文99精品| 久久精品免费观看| 亚洲影院色无极综合| 91久久夜色精品国产九色| 欧美性大战xxxxx久久久| 久久久999精品| 伊人春色精品| 久久久久亚洲综合| 一区二区三区www|