gpt4 book ai didi

c++ - OpenGL 中的文本使用 SDL_TTF

转载 作者:太空宇宙 更新时间:2023-11-04 08:11:57 24 4
gpt4 key购买 nike

我是 OpenGL 的初学者,我创建了一个使用 SDL_TTF 在 OpenGL 中写入文本的函数。这是我的函数的代码:

#define WINDOW_WIDTH 832
#define WINDOW_HEIGHT 487
#define glVertex2px(x,y) glVertex2d((double)(x) * 2.0 / (double)WINDOW_WIDTH - 1.0, 1.0 - (double)(y) * 2.0 / (double)WINDOW_HEIGHT);
void glWriteText2d(TTF_Font *font,const char *text,SDL_Color color,const int x,const int y){
GLuint texture;
SDL_Surface *surface;
surface = TTF_RenderText_Blended(font,text,color);
glGenTextures(1,&texture);
glBindTexture(GL_TEXTURE_2D,texture);
gluBuild2DMipmaps(GL_TEXTURE_2D,4,surface->w,surface->h,GL_RGBA,GL_UNSIGNED_BYTE,surface->pixels);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
GLboolean textureIsEnabled = glIsEnabled(GL_TEXTURE_2D);
glEnable(GL_TEXTURE_2D);
glColor3ub(255,255,255);
glBegin(GL_QUADS);
glTexCoord2f(0,0);
glVertex2px(x,y);
glTexCoord2f(0,1);
glVertex2px(x,y + surface->h);
glTexCoord2f(1,1);
glVertex2px(x + surface->w,y + surface->h);
glTexCoord2f(1,0);
glVertex2px(x + surface->w,y);
glEnd();
if(!textureIsEnabled){
glDisable(GL_TEXTURE_2D);
}
}

这个函数不起作用,因为当我使用它时,它在应该是文本的地方绘制了一个颜色为 color 的矩形。我应该在我的代码中更改什么才能使其正常工作?

最佳答案

您生成的纹理填充有纯色。它塑造文本的是 alpha channel ,但您没有启用 alpha 混合,所以您看不到它。添加

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

或至少进行 alpha 测试(由于缺乏混合会产生更锐利的边缘 - 对于某些字体,这样看起来甚至更好)。

另请注意,您既没有释放生成的 SDL_Surface 也没有释放 GL 纹理;这样你很快就会耗尽内存。将数据复制到 GL 纹理后,纹理可以重复使用,SDL_Surface 可能会被释放。

关于c++ - OpenGL 中的文本使用 SDL_TTF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38750624/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com