В настоящее время я пишу приложение OpenGL, которое отображает много текста. Рендеринг текста ранее выполнялся с помощью Qt, но по соображениям производительности мы меняем все с помощью рендеринга OpenGL.
Я сделал весь конвейер шейдеров / рендеринга, он работает хорошо. Но после прочтения do c для freetype я все еще не понимаю, как правильно рендерить в нужном размере.
Сейчас я использую функцию
FT_Set_Pixel_Sizes(face, 0, mFontSize);
. размер моего шрифта, но я знаю, что это неверно, потому что Qt рендерился в 'point' (я думаю ..), поэтому весь текст теперь меньше.
Я читал об использовании функции
FT_Set_Char_Size(
face, /* handle to face object */
0, /* char_width in 1/64th of points */
16*64, /* char_height in 1/64th of points */
300, /* horizontal device resolution */
300 ); /* vertical device resolution */
И вот мой первый вопрос, что я должен поставить в резолюции? Я не могу знать DPI экрана ... Какой стандарт я должен использовать?
Кроме того, мне нужно, чтобы на экране был фиксированный размер при любом увеличении. Сейчас я предварительно вычисляю вершину моего глифа на стороне процессора, как в этом уроке https://learnopengl.com/In-Practice/Text-Rendering Но для параметра "scale" я использую 1.f / font_size.
И затем На шейдере я делаю
(camera * vec3(char_position.xy, 1)).xy + vertex.xy / viewport * font_size.
С этим я могу иметь фиксированный размер на экране, с максимумом в 45 пикселей, как я просил, чтобы вольным шрифтом. Но это не правильно с точки зрения того, что визуализировал Qt.
Но я не вижу, как это сделать с помощью DPI 'solution'