В настоящее время мы используем opengl для отображения английских символов.
Нет, вы не используете OpenGL. Откуда я знаю это? Поскольку OpenGL не выполняет рендеринг текста. Все это указывает на точки, линии и треугольники.
Что вы используете некоторая библиотека, которая умеет рисовать символы с точками, линиями и треугольниками, а затем использует OpenGL для выполнения этой работы. И конкретная библиотека, которую вы используете, по-видимому, не знает, как обращаться с символами вне набора символов ASCII.
Конечно, дело не только в этом. Кодировка имеет значение. Самые последние версии поддержки C++ Unicode в источниках программы (так что вы можете писать unicode в строковых литералах), но это не дает вам поддержку Unicode в вашей программе - это просто компилятор, который знает, как с этим бороться, но это знание не автоматически переходит в скомпилированную программу.
До сих пор существует только одна операционная система, в которой поддержка Unicode настолько глубоко укоренилась, что никакой дополнительной работы не требуется; на самом деле конкретный способ кодирования Unicode был изобретен для него, но, к сожалению, это одна из самых проектов OS ниши есть вокруг: Plan9
Помимо Unicode, есть также много других схем кодирования символов, все несовместимые друг с другом, каждый для конкретного вида письма. Это означает, что также невозможно смешивать символы из разных систем записи в кодировании текстов с такими локализованными наборами символов. Следовательно, была изобретена схема uni versal en cod.
Вы, скорее всего, работаете в Windows, Linux, BSD, Solaris или MacOS X. И во всех случаях выполнение работы с не-ASCII-символами означает дополнительную работу для вас, программиста. MacOS X, вероятно, является одной ОС с наименьшим барьером входа.
Так вот вопросы, которые вы должны ответить для себя:
- , что кодировка символов используется (надеюсь Unicode)?
- В библиотеке текстового рендеринга используются коды поддержки кодов в этой кодировке?
- Имеет ли библиотека текстового рендеринга механизм компоновки (вещь, которая позиционирует символы), или это необходимо предоставить дополнительно?
Среди существующих средств визуализации текста, которые могут рисовать OpenGL, в настоящее время Freetype-GL является наиболее способным; он имеет поддержку для Юникода
https://github.com/rougier/freetype-gl