renderização problema não-Inglês texto unicode usando fonte FreeType em OpenGL
-
19-09-2019 - |
Pergunta
Atualmente, estou seguindo NeHe lição tutorial 43 ( http: // nehe.gamedev.net/data/lessons/lesson.asp?lesson=43 ). O código funciona satisfatoriamente apenas para texto em Inglês, línguas não Unicoded. Felizmente, eu seguir um link de NeHe lição 43 a http: //www.cs. northwestern.edu/~sco590/fonts_tutorial.html e encontrou uma outra amostra idêntica tutorial com uma única diferença:. ele usa w_char, e as reivindicações do site que podem ser executados em um idioma diferente do Inglês
Então, eu dar-lhe uma tentativa:
freetype::print(our_font, 320, 200, (unsigned short*)L"Active FreeType Text หกโด้กี่ดุ öáæé おはよ。- %7.2f", cnt1);
A função print do namespace freetype tem o quarto argumento como * const unsigned short ** então eu typecasted-lo. Eu também colocar um L na frente da cadeia entre aspas duplo para caracteres e colocar em alguns caracteres asiáticos para testar propósito.
O resultado é todo o texto lata Inglês exibido muito bem, mas todos os caracteres tailandeses se tornar "[] B [] I [] 5H [] 8". O [] são caixas quadradas. Pelo que eu entendo, isso implica que a fonte não tem o idioma especificado, então eu tentei outras fontes, mas todas as outras fontes tailandesas dar essas mesmas caixas quadradas. Para a fonte japonesa, é o mesmo. Todas as caixas juntamente com alguns caracteres do idioma inglês ao lado deles. O öáæé substring está sendo processado muito bem sem qualquer problema.
Am I esquecendo alguma coisa aqui? Como podemos exibir linguagem não-Inglês Unicode aqui?
Solução
Felizmente, o autor adicionou uma versão modificada de seu tutorial em seu website (especificada na questão) e usa wchar_t (na versão original, os usos autor * const curto não assinado ** como um argumento na função de impressão ), que permite idiomas diferentes do inglês.
Outras dicas
Parece que print () na lição 43 não é sequer perto Unicode capaz. Todos NeHe está fazendo é criar 256 listas de exibição para os primeiros 256 caracteres ASCII, não aceitando uma string UTF8 e convertê-lo para UTF32 para FreeType.
este em C ++ tem funcionado muito bem para mim.
Além disso, pegue uma cópia do GNU Unifont para se certificar de que você tem glifos para todos os BMP .