还是OpenGL里显示中文的问题

来源:百度知道 编辑:UC知道 时间:2024/05/10 15:02:39
我现在使用的是这个功能来显示,已经能够正常编译,可就是什么文字都显示不出来,不管是中文英文都不行。。。到底是什么问题呢?这和我使用双缓存有什么关系吗?
void ShowWord(int x_, int y_, string str)
{
GLYPHMETRICSFLOAT pgmf[1];
HDC hDC = wglGetCurrentDC();
DWORD dwChar;
int ListNum;
glRasterPos2i(x_,y_);
for(size_t i = 0; i < str.length(); i++)
{
if(IsDBCSLeadByte(str[i]))
{
dwChar = (DWORD)((str[i]<<8)|str[i+1]);
i++;
}
else
dwChar = str[i];
ListNum = glGenLists(1);
BOOL ret = false;
ret = wglUseFontOutlines(hDC,dwChar,1,ListNum,0.0,0.1,WGL_FONT_LINES,pgmf);
glCallList(ListNum);
glDeleteLists(ListNum,1);
}
}
刚才是我忘记建Font了,所以没有东西。。。可是现在建了以后,只显示出极其微小的两个点,这又是怎么回事?我不是使用3D的,而是使用gluOrtho2D,但是我测试过修改glTranslatef里面的z值,只要变化量和0差距1以上就会连那小点都看不到。。。

现在的 DC 里 是什么 font ? 是不是要建font?

另外注意是什么中文码,GB, unicode GB ?
对应的 font 也 要是 GB,或 unicode GB。

我没有在OpenGL里用过中文,在MFC里用中文时写过:
LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT));
lf.lfHeight = 240;
lf.lfWidth = 120;
lf.lfEscapement = m_ang;
lf.lfOrientation = m_ang;
lf.lfWeight = 520;
lf.lfItalic = 0;
lf.lfUnderline = 0;
lf.lfStrikeOut = 0;
lf.lfCharSet = GB2312_CHARSET;
lf.lfOutPrecision = 0;
lf.lfClipPrecision = CLIP_STROKE_PRECIS;
lf.lfQuality = 0;
lf.lfPitchAndFamily = 0;
strcpy(lf.lfFaceName, "MS Song");
font.CreateFontIndirect(&lf);

你的OpenGL 是不是画3维的? 3维图有时因光线角度或看的距离等会显示不出物体。