gammaker
да я всё так и делаю, но ведь большая текстура всё равно выводится!
У меня только один вопрос. Делаю 3д игру, хочу сделать вывод текста. Всю сцену рисую в текстуру, которую затем рисую с ортогональной проекцией. Нормально ли будет, если поверх этой текстуры рисовать прямоугольники с текстурами текста с альфа-смешиванием?
Вроде так всегда текст и выводят. Главное одним куском все прямоугольники рисовать, а не по одной буковке.
kipar, спасибо, так и сделаю.
kipar
А откуда эти куски получать?
Valorin
Ну, генерировать VBO состоящий из всех букв данного текста. Это если текст динамический конечно, типа fps или координат. А если статический, типа "New game" - можно один раз вывести всю надпись в текстуру и дальше один прямоугольник с ней рисовать.
kipar
То есть динамический текст выводится по буковке но через VBO за один вызов. Вот это я и хотел услышать. А то пред. сообщение могло ввести в заблуждение.
Valorin, вобщем нужно делать таким образом:
1) загрузить картинку с алфавитом, цифрами и другими знаками
2) написать функцию, которая принимает строку и по ней какбы вырезает из картинки нужные квадратики букв и из них создает картинку всей строки.
3) сделать из полученной картинки опенгл-текстуру.
4) прицепить эту текстуру к прямоугольному тетрагону.
5) рисовать тетрагон.
Важно понимать, что картинка - это обычный динамический двумерный массив обьектов со структурой типа:
структура пиксель
{
байт красный;
байт зеленый;
байт синий;
байт альфа;
};
programina
Пункт 3 лишний... и т.д.
Делай как писал kipar
> Ну, генерировать VBO состоящий из всех букв данного текста.
p.s. у меня проблем с текстом нет =)
Valorin
>> 3) сделать из полученной картинки опенгл-текстуру.
> Пункт 3 лишний... и т.д.
Вы не понимаете, что картинка и текстура - это не одно и то же. Как я уже написала в предыдущем комменте: картинка - это обычный двумерный динамический массив "пикселей" в представлении языка программирования. Текстура же это указатель на обьект опенгл.
programina
Смотри - если наша надпись все равно используется только один раз, а на следующий кадр генерируется заново - нет смысла делать для нее лишнюю текстуру. Можно просто рисовать квадратами буквы сразу на экране.
Просто т.к. букв в тексте может быть много, то главное - не выводить их по одной, иначе страница текста или сотня подписей хп у юнитов может нехило посадить производительность.
А если надпись фиксированная и не меняется - да, делать из нее текстуру как ты написала.
programina
Производительность на динамическом тексте укатаешь. Одна буква - один квад (2 триса, 4 вертекса). На этот квад накладываешь текстуру шрифта по сгенерированным координатам. Квады потому уже группируй как хочешь, VAO, VBO, батчи, инстансы.
почему, если в glDrawArrays индекс отсчёта изменять, то производительность сильно страдает(падает раз в несколько)? Что могло бы быть альтернативой?
тоже, кстати, вопрос про текст. На каждую букву по одному прямоугольнику, так?
Тема в архиве.