2016-09-27 2 views
-1

C에서 FreeType2와 OpenGL을 사용하여 텍스트를 그리려하지만, 사각형으로 렌더링됩니다. 나는 튜토리얼 here, herehere을 따라 왔습니다. 이 코드는 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 문서를 읽었으며 분명히 잘못된 것은 아무것도 없다. 누군가 내가 놓친 걸 말해 줄 수 있니?

+0

어떤 종류의 사각형입니까? – immibis

+0

텍스처를 만들 때 GL_TEXTURE_2D가 활성화되어 있습니까? 또한 x 및 y 값을 정점에 직접 추가하지 마십시오. 대신 변환을 사용하십시오. – SporreKing

답변

0

많은 시행 착오 끝에 해결책을 찾았습니다. OpenGL 1.4는 텍스처가 2의 거듭 제곱이되어야합니다. 임시 배열을 할당하고 사용했습니다. 또한 GL_INTENSITY 설정이 작동하지 않아 수동으로 RGBA 배열을 만들었습니다.

관련 문제