Пытаюсь по одному гайду на хабре понять как же с помощью FreeType выводить текст в OpenGL. Из всего что я понял, это то, что FreeType подготавливает что-то типа текстуры где будут расположены символы в нужном мне размере и так далее. А OpenGL будет уже выводить их с этой текстуры. Так вот, помогите пожалуйста вывести хотя бы что-то. До меня не доходит что и как делать дальше. Вот что я имею на данный момент. Как мне вывести через OpenGL этот X? Там есть пример генерации текстуры, но там ещё сохраняются всякие метрики которые нужны, а у меня этого glm::ivec2 и тд нету. Как бы переделать чтобы не пришлось подключать этот glm::? Помогите пожалуйста. <3
>>239681691 (OP) face->glyph->bitmap; ну вот он тебе нарисовал битмап. Загружай его в текстуру и рисуй. Ты текстуры понимаешь в OpenGL? Ты же не с текста начал OpenGL изучать?
>>239684598 Я же написал, там в примере есть рисование текстуры но там еще и метрики надо сохранять чтобы нормально рисовалось, а у меня этого glm нету и подключать еще и его я не хочу. Изучать OpenGL я начал можно сказать ни с чего. Мне надо было рисовать свой оверлей и я искал код в интернете и копипастил его, а потом пытался разбирать его и подгонять под то как надо мне. Рисовать что-то кроме обычных квадратов и тд я не умею.
>>239684576 Как по мне - тонко. На выходе получатся килобайты, ведь не использовался ЯВУ, который преобразовывал исходный код в машинный. С точки зрения ассемблера мегабайт - это очень много. Ты можешь использовать ассемблерную вставку в коде.
>>239684726 В той статье что я читаю и в твоей статье используются какие-то шейдеры. Я не знаю что это и как их использовать. У меня отрисовка происходит в перехваченной функции SwapBuffers. Можно ли как-то по другому рисовать? У меня почему-то шейдеры вызывают неприязнь.
width: ширина глифа в пикселях, доступ по face->glyph->bitmap.width height: высота глифа в пикселях, доступ по face->glyph->bitmap.rows bearingX: горизонтальное смещение верхней левой точки глифа по отношению к origin, доступ по face->glyph->bitmap_left bearingY: вертикальное смещение верхней левой точки глифа по отношению к origin, доступ по face->glyph->bitmap_top advance: горизонтальное смещение начала следующего глифа в 1/64 пикселях по отношению к origin, доступ по face->glyph->advance.x
>>239684745 Блядь, а нахуй тебе GLM подключать чтобы хранить вектора? glm::ivec2 это структура, которая хранит два числа типа int напиши себе такую стуктуру struct vec2 { int x, y; } и храни в ней отступы и координаты, например vec2 Size (128,128)
>>239685276 А обязательно писать шейдер? Я просто вообще не понимаю что это, для чего и подходит ли он мне. Тем более я не знаю есть ли на старых версиях OpenGL эти шейдеры, мне нужна поддержка и старых версий игры. ( Я делаю оверлей )
>>239685559 Шейдеры везде есть. Нужно тебе их писать или нет, я не ебу. Ты же делаешь. Проблема в том, что нихуя не знаешь. Ни С++, ни OpenGL. Это сложные вещи. Особенно OpenGL. Тебе так никто не будет каждый шаг объяснять. Ты либо понимаешь что происходит, либо нет.
Аноны, помогите нарисовать этот гребанный X, я не понимаю как это сделать не используя шейдер. В чем его плюс? Как мне отрисовать без шейдера bitmap этот? Я гуглил но нашел только тот пример, который когда-то пробовал и у меня в итоге нарисовался белый квадрат.
>>239690862 ну че те не понятно? шейдер нужен тк ты взял урок опенгл 3, где шейдеры обязательны и нет fixed function pipeline когда можно рисовать через glbegin/glvertex/glend (хотя на самом деле их можно использовать) статью писал тупой хуесос который не давал пояснений по структуре того как хранит фритайп типа https://www.freetype.org/freetype2/docs/reference/ft2-glyph_management.html#ft_bitmapglyph и вообще ошибочно что в цикле генерится по одному глифу и грузится в отдельные текстуры - так можно, но это плохо, я еще молчу про то что чувак дублировал половину данных фритайпа в структуру Character фритайп может сразу нагенерить все нужные глифы если ты нихуя не понимаешь - найди готовую библиотеку для вывода текста под опенгл? если тебе не нужны разные виды и размеры шрифтов - скачай готовую картинку по гуглу "font texture" - это обычно таблица из букв последовательно по алфавиту - её можно загрузить в одну текстуру и рисовать квадратиками, но нужно расчитывать координату в текстуре самому если тебе вообще не нужно динамического вывода разных строк - ты вообще можешь сразу подготовить картинку с нужным текстом и выводить как есть
>>239681691 (OP) >как мне вывести через OpenGL этот X? так как написано в статье - только убрать цикл - загрузишь одну букву в текстуру и потом её рисуешь если ты нихуя не знаешь какой шейдер должен быть или как вывести прямоугольник с текстурой или без шейдера - тебе нужно начать с этого а не пытаться понять как работать с freetype
>>239691453 Я сгенерировал картинку.png где есть разные глифы, так же вместе с картинкой сгенерировался файл где есть всякие оффсеты. Помоги пожалуйста вывести что-то из этой картинки. Я не знаю как её подгрузить и что с ней сделать.
>>239692273 и че тебе не понятно? загружаешь текстуру в опенгл по любому примеру - да там альфа канал надо уметь его использовать, задавать формат корректный текстуре
>>239692368 что тут не понятно? в квадрате rect (x y w h) твоей картинки - лежит буква с символом code че за оффсет - не ебу > char width 16 offset 2 7 rect 1 1 12 18 code 0 наводящую картинку тебе сделал блять выделил нолик в ебаном фотошопе - ты сам такое не способен сделать?
>>239694771 правильно - чтобы загрузить картинку из файла - нужно написать загрузчик или использовать готовую библиотеку - выбирай https://www.khronos.org/opengl/wiki/Image_Libraries я не пойму - если ты нихуя не умеешь - какого хуя ты полез так далеко сразу? че блять тебе мешало взять SDL2 например с SDL_ttf и SDL_image?
>>239696188 >>239696188 ну как в статье делай епт там где цикл for (GLubyte c = 0; c < 128; c++) только вместо цикла у тебя GLubyte c = 'X'; дальше все как надо - создание текстуры, загрузка битмапы глифа в текстуру остается нарисовать квадратик для этого тебе нужно вернуться к урокам https://habr.com/en/post/311808/ и взять код создания шейдеров, а потом возвращайся на статью про шрифты в раздел "Шейдеры" (жирным) - естественно там цикл по строке который извлекает символ и подставляет в нужные места
либо блять нужно делать вручную без шейдеров glEnable(GL_TEXTURE_2D); glBindTexture(...); glBegin(GL_QUADS); glTexCoord2f(0,0); glVertex2f(0,0); glTexCoord2f(1,0); glVertex2f(1,0); glTexCoord2f(1,1); glVertex2f(1,1); glTexCoord2f(0,1); glVertex2f(0,1); glEnd();
сука ебаный двач hk пишет bad gateway на отправку опять, пришлось на .pm зайти
>>239697709 Спасибо, сейчас попробую. А в чем разница между рисованием при помощи шейдера и таким рисованием? Я вроде бы так пробовал когда-то рисовать (скопипастил код) но ничего кроме белого квадрата не получил. А еще у меня в glOrtho размеры окна указаны в пикселях (типа width 1366)
>>239697709 Вот так а потом там где сама отрисовка glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, тут_та_текстура?); glBegin(GL_QUADS); glTexCoord2f(0,0); glVertex2f(0,0); glTexCoord2f(1,0); glVertex2f(1,0); glTexCoord2f(1,1); glVertex2f(1,1); glTexCoord2f(0,1); glVertex2f(0,1); glEnd();
>>239702605 >>239701920 я у тебя спросил где ты это сделал а ты мне кусок опять кода показываешь ГДЕ БЛЯТЬ ТЫ ЕГО ВЫЗЫВАЕШЬ пиздец это так сложно ответить? контекст должен быть доступен а не "я вызвал функции опенгл где захотел мне поебать"
>>239681691 (OP) А вы в курсе, что мочух /h хуй сосет и в жопу принимает, и ему все мало? А его мать шлюху ебали 48 собак и она стонала как последняя блядь.
>>239702925 ну и какого ты его там вызываешь? контекст же не активен в данном потоке ептыблять тебе нужно все делать в твоем свапбуферсе в т.ч. инициировать свои ебучие ресурсы блять тебе че западло объявить глобалку BOOL init = true; чтобы потом в swapbuffers делать if(init) { // тут ты делаешь свои ебаные загрузки и разовое создание текстур init = false; // один раз }
знаешь оп да пашол ты впидзу пидор какого хуя ты лезешь делать что-то не пытаясь начать с основ какого блять хуя если ты базовых вещей ни опенгл ни хуков ни загрузки файлов нихуя не знаешь ПОШОЛ НАХУЙ ПИДОР Я ОТПИСАЛСЯ ОТ ТВОЕГО ТРЕДА И БЛЯТЬ ЧТОБЫ Я ТЕБЯ НЕ ВИДЕЛ ТУТ БОЛЬШЕ