Рендеринг текста — одна из сложных тем, которую нужно понять большинству новичков. и сейчас я застрял здесь. хорошо, я хотел бы спросить, мой путь — хорошая идея сделать текст ..
OpenGL не имеет встроенной функциональности для отображения текста на экране, что меня смущает.
после поиска, что текст рендера использует растровое изображение.
Загрузить и связать текстуру растрового шрифта -> Разобрать текст, сгенерировать и связать массив вершин, сопоставить текстуру с помощью ультрафиолетового массива, … -> Отобразить его на экран
Хорошо, это может решить, как визуализировать текст, но я все еще застрял. (например) что если я сделаю основанный на таймере текст которые меняются каждый миллисекунды (так как я рисую текст так же, как: Minute: Second: Mili Second) это не очень хорошая идея, верно? так как я должен повторить этот алгоритм, пока я хочу изменить текст. Я думаю, если мы будем продолжать использовать растровое изображение, машина станет медленнее.
ну, так как рендеринг растрового текста происходит так медленно, я делаю способ визуализации текста без растрового изображения
возможно, будет лучше? вот почему я спрашиваю здесь
вот как я рисую модель персонажа с 3d вершина + GLOrtho просто взгляните на мой векторный код шрифта (пример)
Как нарисовать символ «L» с помощью вектора
const float MAX_HEIGHT = 18.0f; //set maximum height of character
const float MAX_WIDTH = 20.0f; //set maximum width of character
void drawL(GLfloat x,GLfloat y){
glPushMatrix();
//i've set before glOrtho(0, Window.width, Window.height, 0, 0, 1);
glTranslatef(x,y,0.0f);
glBegin(GL_QUADS);
glVertex3f(0.0f,0.0f,0.0f); //draw vertical quad
glVertex3f(3.0f,0.0f,0.0f);
glVertex3f(3.0f,MAX_HEIGHT,0.0f);
glVertex3f(0.0f,MAX_HEIGHT,0.0f);
glNormal3f(0.0f,MAX_HEIGHT,0.0f); //draw horizontal quad
glVertex3f(2.0f,MAX_HEIGHT,0.0f);
glVertex3f(MAX_WIDTH - 10.0f,MAX_HEIGHT,0.0f);
glVertex3f(MAX_WIDTH - 10.0f,MAX_HEIGHT - 3.0f,0.0f);
glVertex3f(2.0f,MAX_HEIGHT - 3.0f,0.0f);
glEnd();
glPopMatrix();
}
Есть некоторые преимущества, если мы рисуем символ с вершиной vector / GL_QUAD, если вы хотите изменить размер шрифта, не получится размытие.
теперь вопрос станет ли это медленнее, если я сделаю текст на основе таймера, который меняется каждую миллисекунду?
таким образом, повторить алгоритм не требуется, если я собираюсь изменить текст. они даже не потребляют много ресурсов, потому что это не растровое изображение, а просто векторная визуализация.
которые меняются каждую миллисекунду
Прежде всего, это потребовало бы, чтобы частота обновления дисплея составляла 1000 Гц, чтобы быть даже представимой. Нет дисплея в мире тот быстро. Самые быстрые дисплеи управляют частотой около 200 Гц. Так что даже не думайте об обновлении вашего таймера с такой скоростью.
Важное правило об отображениях: не отображайте больше цифр, чем вы можете точно измерить. Точность отображения обновлений составляет порядка 1/10 секунды, поэтому вы должны отображать только это значение.
Если вы хотите сохранить скриншот игры, то интервал между обновлениями игры определяет точность. Обычно не более 100 Гц, т.е. 1/100 секунды.
Теперь, так как вы не хотите загружать новую текстуру строки в каждом кадре, обычным способом для этого являются атласы текстуры глифа, то есть текстура с каждым глифом, который вы хотите визуализировать в нем, из которого вы затем рисуете квадраты, соответствующие символы по их текстурной координате. Чтобы сэкономить на текстурной памяти, вы можете использовать такой метод, как Поля расстояния (реализовано, например, в libGDX).
Также я рекомендую прочитать это ТАК ответьте на методы рендеринга текста OpenGL
Других решений пока нет …