opengl汉字消失了

时间:2013-04-20 13:37:27

标签: c windows opengl

我想在opengl中绘制一些中文字符,教程给了我以下代码(我修改了一些部分)

GLvoid showText(int x, int y, const char* text) {
    glRasterPos2f(x, y);
    HDC hdc = wglGetCurrentDC();
    HFONT g_font = CreateFont(
        -16,
        0,
        0,0,FW_BOLD,0,0,0,GB2312_CHARSET,OUT_TT_PRECIS,0,ANTIALIASED_QUALITY ,0, "楷体"
    );
    SelectObject(hDC, g_font);

    // get the length of text
    int wlen = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, text, -1, NULL, 0); 
    --wlen; // remove duplicated '\0'
    wchar_t* wstring = (wchar_t*)malloc((wlen+1) * sizeof(wchar_t));
    MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, text, -1, wstring, wlen); // All to 2byte-char
    wstring[wlen] = L'\0';

    GLuint base;
    base = glGenLists(1);
    for(i=0; i<wlen; ++i) {
        if (! wglUseFontBitmapsW(hDC, wstring[i], 1, base)) {
            DWORD err = GetLastError();
            printf("%d\n", err);
        }
        glCallList(base);
    }
    // release resources
    glDeleteLists(base, 1);
    DeleteObject(g_font);
}

然后我用以下代码测试它:

glNewList(g_lists, GL_COMPILE_AND_EXECUTE);
    glColor3f(0, 0, 1);

showText(-110, 110, "滴滴答答呱呱呱刷刷怕");
showText(100, -110, "嘎嘎嘎asawhaga了");
    glColor3f(1, 0, 1);
    glBegin(GL_LINES);
        glVertex2f(300, 0);
        glVertex2f(-300, 0);
    glEnd();
glEndList();

输出: 它应该是:

  

“滴滴答答呱呱呱刷刷怕”

     

“嘎嘎嘎asawhaga了”

但我得到了:

  

“滴答答呱呱呱刷刷怕”

     

“嘎嘎嘎asawhaga了”

正如你所看到的,第二个“滴”从输出中消失了。 通过打印出调试信息,我发现对wglUseFontBitmapsW()的第二次调用返回false。 根据{{​​3}},我将通过调用GetLastError()获得错误描述,但GetLastError只返回0。 然后我试了一下:

if (! wglUseFontBitmapsW(hDC, wstring, 1, base))
    wglUseFontBitmapsW(hDC, wstring, 1, base);

这次它有效! 所以我现在不知道我的代码有什么问题...... 可能带有重量的设置:

#ifdef UNICODE
#undef UNICODE
#endif

#define bool BOOL
#define BITS 32

MSDN,修改自Nehe的教程 我在使用Windows 7的mingw-gcc 4.7.0下编译它

0 个答案:

没有答案