Я новичок в OpenGL, и я создал функцию для записи текста в OpenGL с использованием SDL_TTF. Вот код для моей функции:Текст в OpenGL с использованием SDL_TTF
#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
в том месте, где текст должен быть. Что я должен изменить в своем коде, чтобы он работал?
Извините, но я думаю, вы должны сначала узнать больше об OpenGL, прежде чем пытаться сделать то, что в настоящее время пытается. Прежде всего OpenGL не имеет встроенных текстовых функций, а также не современного OpenGL. Кроме того, вы не должны использовать этот старый OpenGL 1.1 с конвейером с фиксированной функцией. Это определенно совершенно не рекомендуется. И я никогда раньше не видел glVertex2px. И я не могу найти что-то об этом. Поэтому, наконец, трудно сказать, что не так из этого контекста, без дополнительной информации. Возможно, вы неправильно настроили матрицу Modelview/Projection, чтобы увидеть только небольшую часть целого? – Michael
@Michael О 'glVertex2px', это макрос, который я сделал сам, который рисует вещи, используя количество пикселей в верхнем левом углу окна, как в SDL. В 2D я считаю это более практичным. Я забыл включить его определение в код, но я отредактировал, чтобы исправить это. –