2010-02-08 2 views
3

현재 NeHe 튜토리얼 강의 43 (http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=43)을 따르고 있습니다. 이 코드는 유니 코드 언어가 아닌 영어 텍스트에 대해서만 만족스럽게 작동합니다. 다행스럽게도 NeHe 강의 43에서 http://www.cs.northwestern.edu/~sco590/fonts_tutorial.html으로 연결되는 링크를 따라 하나의 차이점 만 제외하고 다른 동일한 튜토리얼 샘플을 발견했습니다. w_char을 사용하고 사이트는 영어가 아닌 다른 언어로도 실행할 수 있다고 주장합니다.OpenGL에서 freetype 글꼴을 사용하여 영어 이외의 유니 코드 텍스트를 렌더링하는 데 문제가 있습니다.

freetype::print(our_font, 320, 200, (unsigned short*)L"Active FreeType Text หกโด้กี่ดุ öáæé おはよ。- %7.2f", cnt1); 

기능 네임 스페이스 FreeType에서의 서명되지 않은 짧은 ** 그래서 그것을 typecasted const를 *로 4 번째 인수를 가지고 인쇄 :

그래서 나는 그것을 시도를 제공합니다. 또한 긴 문자에 대해 큰 따옴표로 묶인 문자열 앞에 L을 붙이고 테스트 목적으로 아시아 문자를 넣습니다.

그 결과 모든 영어 텍스트가 잘 표시 될 수 있지만 모든 태국어 문자는 "[] B [] I [] 5H [] 8"이됩니다. []는 사각형 상자입니다. 내가 이해하는 바로는 이것은 글꼴에 지정된 언어가 없다는 것을 의미하므로 다른 글꼴을 시도했지만 다른 모든 태국 글꼴은이 사각형 상자를 제공합니다. 일본어 글꼴의 경우 동일합니다. 모든 상자 옆에는 영어 문자가 몇 개 있습니다. 하위 문자열 öáæé는 문제없이 잘 렌더링됩니다.

여기를 잊어 버렸습니까? 비영어권 유니 코드 언어를 어떻게 표시 할 수 있습니까?

+0

NeHe 링크를 연결할 수 있습니까? – genpfault

+0

요청에 따라 연결되었습니다. – Karl

답변

2

다행히도 작성자는 자신의 웹 사이트 (질문에 지정된)에서 수정 된 버전의 자습서를 업로드했으며 wchar_t를 사용합니다 (원래 버전에서는 작성자가 * const unsigned short **를 인자로 사용합니다). 함수)를 사용하여 영어 이외의 언어도 사용할 수 있습니다.

2

수업 43의 print()는 유니 코드를 사용할 수있는 곳이 아닙니다. NeHe는 UTF8 문자열을 받아들이지 않고 FreeType을 위해 UTF32로 변환하지 않고 첫 번째 256 ASCII 문자에 대해 256 개의 표시 목록을 만드는 중입니다.

을 C++로 변환하면 꽤 잘 작동합니다.

GNU Unifont의 복사본을 가지고 BMP에 대한 글리프가 있는지 확인하십시오.

관련 문제