5

opengl字符纹理的问题

为甚么使用下面的函数制作的字符纹理显示不了

#define FONT_SIZE 64
#define TEXTURE_SIZE FONT_SIZE

GLuint drawChar_To_Texture(const char* s) {
wchar_t w;
HDC hDC = wglGetCurrentDC();

// 选择字体字号、颜色
// 不指定字体名字,操作系统提供默认字体
// 设置颜色为白色
selectFont(FONT_SIZE, DEFAULT_CHARSET, "");
glColor3f(1.0f, 1.0f, 1.0f);

// 转化为宽字符
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, s, 2, &w, 1);

// 计算绘制的位置
{
    int width, x, y;
    GetCharWidth32W(hDC, w, w, &width);    // 取得字符的宽度
    x = (TEXTURE_SIZE - width) / 2;
    y = FONT_SIZE / 8;
    glWindowPos2iARB(x, y); // 一个扩展函数
}

// 绘制字符
// 绘制前应该将各种可能影响字符颜色的效果关闭
// 以保证能够绘制出白色的字符
{
    GLuint list = glGenLists(1);

    glDisable(GL_DEPTH_TEST);
    glDisable(GL_LIGHTING);
    glDisable(GL_FOG);
    glDisable(GL_TEXTURE_2D);

    wglUseFontBitmaps(hDC, w, 1, list);
    glCallList(list);
    glDeleteLists(list, 1);
}

// 复制字符像素到纹理
// 注意纹理的格式
// 不使用通常的GL_RGBA,而使用GL_LUMINANCE4
// 因为字符本来只有一种颜色,使用GL_RGBA浪费了存储空间
// GL_RGBA可能占16位或者32位,而GL_LUMINANCE4只占4位
{
    GLuint texID;
    glGenTextures(1, &texID);
    glBindTexture(GL_TEXTURE_2D, texID);
    glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE4,
        0, 0, TEXTURE_SIZE, TEXTURE_SIZE, 0);
    glTexParameteri(GL_TEXTURE_2D,
        GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,
        GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    return texID;
}

}

查看全部
xy707707
KrisRoofe
2015/06/04 01:31
  • 纹理
  • 字符
  • gl
  • 点赞
  • 收藏
  • 回答
    私信

1个回复