C에서 FreeType2와 OpenGL을 사용하여 텍스트를 그리려하지만, 사각형으로 렌더링됩니다. 나는 튜토리얼 here, here 및 here을 따라 왔습니다. 이 코드는 OpenGL 1.4 만있는 Red Hat 5.6에서 실행됩니다.OpenGL 텍스처가 그리기가 아닙니까?
여기 코드가 있습니다. 먼저 FreeType으로 글꼴을로드합니다. 내가 터미널에 원하는 문자에 대한 버퍼를 인쇄했는데 제대로로드 된 것 같습니다. 나는 명확성을 위해 몇 가지 오류 검사를 생략하고있다. 또한 필자는이 코드를 수동으로 작성해야했기 때문에 실수로 잘못 입력 한 경우 구문 오류를 무시하십시오.
FT_Library ft;
FT_Init_Freetype(&ft);
FT_Face face;
FT_New_Face(ft, fontpath, 0, &face);
Ft_Set_Pixel_Sizes(face, 0, 16);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
FT_Load_Char(face, c, FT_LOAD_RENDER);
GLuint texture;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D,
0,
GL_RGBA,
face->glyph->bitmap.width,
face->glyph->bitmap.rows,
0,
GL_INTENSITY,
GL_UNSIGNED_BYTE,
face->glyph->bitmap.buffer);
FT_Done_Face(face);
FT_Done_Freetype(ft);
앞에서 설명한 것처럼 버퍼의 행과 너비를 반복하여 값을 인쇄하면 모양이 좋아 보입니다. glTexImage2D에 대한 호출은 각 픽셀이 이진 강도 값이라는 점을 고려하여 원하는 것이라고 생각합니다.
기호를 그리는 코드는 아래에 있지만 작동하지 않는 것 같습니다. 대신 방금 사각형을 그립니다.
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
glColor3f(1,1,1);
GLfloat x = 0;
GLfloat y = 0;
GLfloat w = 5;
GLfloat h = 5;
glBegin(GL_QUADS);
glTexCoord2f(0,0);
glVertex2f(x,y);
glTexCoord2f(1,0);
glVertex2f(x+w,y);
glTexCoord2f(1,1);
glVertex2f(x+w,y+h);
glTexCoord2f(0,1);
glVertex2f(x,y+h);
glEnd();
glBindTexture(GL_TEXTURE_2D, 0);
glDisable(GL_TEXTURE_2D);
glDisable(GL_BLEND);
이 시점에서 나는 실격 상태입니다. 나는 OpenGL 문서를 읽었으며 분명히 잘못된 것은 아무것도 없다. 누군가 내가 놓친 걸 말해 줄 수 있니?
어떤 종류의 사각형입니까? – immibis
텍스처를 만들 때 GL_TEXTURE_2D가 활성화되어 있습니까? 또한 x 및 y 값을 정점에 직접 추가하지 마십시오. 대신 변환을 사용하십시오. – SporreKing