游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3576|回复: 2

[求教]OpenGL文字输出的颜色问题

[复制链接]

3

主题

35

帖子

35

积分

注册会员

Rank: 2

积分
35
QQ
发表于 2007-11-2 11:57:00 | 显示全部楼层 |阅读模式
请教各位一个问题:

使用下面的代码输出文本,发现如果不禁用纹理输出的文本始终是黑色的,而禁用以后则正常。多重纹理的情况下则必须将每层纹理都禁用才行,否则始终是黑色。

参考了一下《学OpenGL编3D游戏》CAI教程里的代码,发现在输出文本时同样禁用了纹理。问题是它是个单层纹理的程序,直接disable一下就可以了。多重纹理的情况下禁用所有纹理需要知道纹理层数吧?

一个输出文本的子函数需要知道当前程序使用的纹理层数?感觉有点麻烦。请问有更好的解决办法吗?谢谢。

GLuint  list = glGenLists(static_cast<GLsizei>(str.length()) + 1);

Activate(); // active font
for (uint_t i=0; i<str.length(); ++i)
    wglUseFontBitmaps(wglGetCurrentDC(), str, 1, list + i + 1);

glNewList(list, GL_COMPILE);
{
    for (uint_t i=1; i<=str.length(); ++i)
        glCallList(list + i);
}glEndList();

//////////////////////////////////////////////////////////
// disable texture
glActiveTexture(GL_TEXTURE0);
glDisable(GL_TEXTURE_2D);

glActiveTexture(GL_TEXTURE1);
glDisable(GL_TEXTURE_2D);
//////////////////////////////////////////////////////////
glDisable(GL_DEPTH_TEST);
glColor3f(color.r_, color.g_, color.b_); // text color

glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();

uint_t w, h;
GetTextSize(str.c_str(), w, h);
glRasterPos2i(x + 1, y + h);
glCallList(list);

glMatrixMode(GL_MODELVIEW);
glPopMatrix();

glEnable(GL_DEPTH_TEST);
//////////////////////////////////////////////////////////
glActiveTexture(GL_TEXTURE0);
glEnable(GL_TEXTURE_2D);

glActiveTexture(GL_TEXTURE1);
glEnable(GL_TEXTURE_2D);
//////////////////////////////////////////////////////////
glDeleteLists(list, static_cast<GLsizei>(str.length()) + 1);

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2007-11-2 12:15:00 | 显示全部楼层

Re:[求教]OpenGL文字输出的颜色问题

那些使用了多纹理的地方最后就应该关闭相应的多层纹理。

善后工作要自己做。不要让其它部分来做。

3

主题

35

帖子

35

积分

注册会员

Rank: 2

积分
35
QQ
 楼主| 发表于 2007-11-3 15:49:00 | 显示全部楼层

Re:[求教]OpenGL文字输出的颜色问题

知道如何解决了 再次感谢Enigmaya
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-19 05:47

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表