 |
用OpenGL输出中文,必须使用TrueType字体,请参阅WGL的函数:
BOOL wglUseFontOutlines(HDC hDC,DWORD....)
有一本书《OpenGL深入编程与实例揭密》人民邮电出版,其中有这方面的详细介绍,建议您去买一本,相当不错。
杨穆的来信:
非常感谢ZhaoYu回答我的我的问题“如何用OPENGL显示中文”!
现在我已完全解决了这个问题,现把具体代码寄给你:
HFONT hFont;
CFont *m_pFontSelected=NULL;
LOGFONT lf ;
memset(&lf,0,sizeof(LOGFONT));
lf.lfHeight = -1 ;
lf.lfWidth = -1 ;
lf.lfEscapement = 0 ;
lf.lfOrientation = 0 ;
lf.lfWeight = FW_NORMAL ;
lf.lfItalic = FALSE ;
lf.lfUnderline = FALSE ;
lf.lfStrikeOut = FALSE ;
lf.lfCharSet = ANSI_CHARSET ;
lf.lfOutPrecision = OUT_TT_PRECIS ;
lf.lfClipPrecision= CLIP_DEFAULT_PRECIS ;
lf.lfQuality = PROOF_QUALITY ;
lf.lfPitchAndFamily = VARIABLE_PITCH | TMPF_TRUETYPE | FF_MODERN ;
lstrcpy (lf.lfFaceName, "Arial") ;
CDC *pdc = new CClientDC(this);
m_pFontSelected = new CFont;
m_pFontSelected->CreateFontIndirect(&lf) ;
CFont* pOldFont = (CFont*)pdc->SelectObject(m_pFontSelected) ;
hFont = CreateFontIndirect(&lf);
//设置当前字体
pOldFont = (CFont*)SelectObject(wglGetCurrentDC(),hFont);
GLYPHMETRICSFLOAT agmf[128];
unsigned int ich=0;
unsigned int j=0;
char COText[128];
BYTE FTextList[128];
char cch;
const GLuint FListBase=1000;
unsigned int i=0;
strcpy(COText,"字体显示");
i=0;
j=0;
while(i if (IsDBCSLeadByte(COText[i])){ ///判断是否为双字节
ich=COText[i];
ich=(ich<<8)+256; ////256为汉字内码“偏移量”
ich=ich+COText[i+1];
i++;i++;
wglUseFontOutlines(wglGetCurrentDC(), /////字体轮廓设备联系DC
ich, /////要转换为显示列表的第一个字符
1, /////要转换为显示列表的字符数
1000+j, /////显示列表的基数
0.0f, /////指定与实际轮廓的最大偏移量
0.15f, /////在Z轴负方向的值
WGL_FONT_POLYGONS, /////指定显示列表线段或多边形
&agmf[j]); /////接受字符的地址
FTextList[j]=j;
j++;
}
else{
cch=COText[i];
i++;
wglUseFontOutlines(wglGetCurrentDC(), /////字体轮廓设备联系DC
cch, /////要转换为显示列表的第一个字符
1, /////要转换为显示列表的字符数
1000+j, /////显示列表的基数
0.0f, /////指定与实际轮廓的最大偏移量
0.15f, /////在Z轴负方向的值
WGL_FONT_POLYGONS, /////指定显示列表线段或多边形
&agmf[j]); /////接受字符的地址
FTextList[j]=j;
j++;
}
}
glListBase(FListBase);
glTranslatef(-1.2f,-0.0f,0); ////要显示的文本位置
glCallLists(strlen(COText),GL_UNSIGNED_BYTE,&FTextList);
glFlush();
@!P相关书籍:
《OpenGL图形程序设计指南》
《OpenGL(R) 编程权威指南 第三版》
《OPENGL 程序设计 配光盘 》
《OPENGL图形程序设计及应用环境》
《精通OPENGL》
此问题由Zhao Yu回答。
附加关键字:编程, 源程序, programming, source code, C/C++, MFC, C++ Builder, Borland C++, Turbo C, C, BCB, 图形、图象, picture, graph, image, draw。
|