Бред

Ответить в тред Ответить в тред
Аноним # OP 08/02/21 Пнд 13:46:41 2396816911
image.png 16Кб, 581x221
581x221
OpenGL и FreeType на C++

Пытаюсь по одному гайду на хабре понять как же с помощью FreeType выводить текст в OpenGL. Из всего что я понял, это то, что FreeType подготавливает что-то типа текстуры где будут расположены символы в нужном мне размере и так далее. А OpenGL будет уже выводить их с этой текстуры. Так вот, помогите пожалуйста вывести хотя бы что-то. До меня не доходит что и как делать дальше. Вот что я имею на данный момент. Как мне вывести через OpenGL этот X? Там есть пример генерации текстуры, но там ещё сохраняются всякие метрики которые нужны, а у меня этого glm::ivec2 и тд нету. Как бы переделать чтобы не пришлось подключать этот glm::? Помогите пожалуйста. <3

https://habr.com/ru/post/473990/
Аноним 08/02/21 Пнд 13:51:15 2396820222
Бамп
Аноним # OP 08/02/21 Пнд 14:05:36 2396830763
Бамп
Аноним # OP 08/02/21 Пнд 14:06:43 2396831574
Бамп
Аноним # OP 08/02/21 Пнд 14:13:41 2396836195
Бамп
Аноним # OP 08/02/21 Пнд 14:19:48 2396839656
Бамп
Аноним # OP 08/02/21 Пнд 14:25:43 2396843177
Бамп
Аноним 08/02/21 Пнд 14:27:38 2396843938
>>239683965
Готовое решение:

SECTION .data
msg db "Или на хуй",0xa
len equ $ - msg
SECTION .text
global CMAIN:
CMAIN:
mov eax, 4 ; переместить константут в регистр eax. 0x04 = write()
mov ebx, 1
mov ecx, msg
mov edx, len
int 80h ; прерывание.
mov eax, 1 ; 'выход syscall
mov ebx, 0 ; (success)
int 0x80 ; вызов kernel
Аноним # OP 08/02/21 Пнд 14:30:07 2396845769
Аноним 08/02/21 Пнд 14:30:33 23968459810
>>239681691 (OP)
face->glyph->bitmap; ну вот он тебе нарисовал битмап. Загружай его в текстуру и рисуй. Ты текстуры понимаешь в OpenGL? Ты же не с текста начал OpenGL изучать?
Аноним 08/02/21 Пнд 14:32:49 23968472611
Аноним # OP 08/02/21 Пнд 14:33:07 23968474512
>>239684598
Я же написал, там в примере есть рисование текстуры но там еще и метрики надо сохранять чтобы нормально рисовалось, а у меня этого glm нету и подключать еще и его я не хочу. Изучать OpenGL я начал можно сказать ни с чего. Мне надо было рисовать свой оверлей и я искал код в интернете и копипастил его, а потом пытался разбирать его и подгонять под то как надо мне. Рисовать что-то кроме обычных квадратов и тд я не умею.
Аноним 08/02/21 Пнд 14:35:07 23968487913
>>239684576
Как по мне - тонко. На выходе получатся килобайты, ведь не использовался ЯВУ, который преобразовывал исходный код в машинный. С точки зрения ассемблера мегабайт - это очень много. Ты можешь использовать ассемблерную вставку в коде.
Аноним # OP 08/02/21 Пнд 14:36:09 23968493514
>>239684726
В той статье что я читаю и в твоей статье используются какие-то шейдеры. Я не знаю что это и как их использовать. У меня отрисовка происходит в перехваченной функции SwapBuffers. Можно ли как-то по другому рисовать? У меня почему-то шейдеры вызывают неприязнь.
Аноним 08/02/21 Пнд 14:36:23 23968494915
>>239684879
> не использовался ЯВУ; компилятор не преобразовывал исходный код в машинный.
fix
Аноним 08/02/21 Пнд 14:37:28 23968500616
>>239684935
Объект face->glyph хранит все метрики

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
Аноним # OP 08/02/21 Пнд 14:38:57 23968509217
>>239685006
А почему там используется какой-то glm?
Аноним 08/02/21 Пнд 14:41:57 23968527618
>>239684745
Блядь, а нахуй тебе GLM подключать чтобы хранить вектора? glm::ivec2 это структура, которая хранит два числа типа int
напиши себе такую стуктуру
struct vec2 {
int x, y;
}
и храни в ней отступы и координаты, например
vec2 Size (128,128)
Аноним # OP 08/02/21 Пнд 14:46:56 23968555919
>>239685276
А обязательно писать шейдер? Я просто вообще не понимаю что это, для чего и подходит ли он мне. Тем более я не знаю есть ли на старых версиях OpenGL эти шейдеры, мне нужна поддержка и старых версий игры. ( Я делаю оверлей )
Аноним 08/02/21 Пнд 14:53:51 23968600420
>>239685559
Шейдеры везде есть. Нужно тебе их писать или нет, я не ебу. Ты же делаешь. Проблема в том, что нихуя не знаешь. Ни С++, ни OpenGL. Это сложные вещи. Особенно OpenGL. Тебе так никто не будет каждый шаг объяснять. Ты либо понимаешь что происходит, либо нет.
Аноним # OP 08/02/21 Пнд 14:56:48 23968622921
>>239686004
Да мне осталось лишь текст вывести и все, остальное я сам уже смогу точно
Аноним # OP 08/02/21 Пнд 15:32:03 23968855022
Аноны, помогите нарисовать этот гребанный X, я не понимаю как это сделать не используя шейдер. В чем его плюс? Как мне отрисовать без шейдера bitmap этот? Я гуглил но нашел только тот пример, который когда-то пробовал и у меня в итоге нарисовался белый квадрат.
Аноним # OP 08/02/21 Пнд 15:36:16 23968882323
Бамп
Аноним # OP 08/02/21 Пнд 15:38:50 23968896724
Бамп
Аноним # OP 08/02/21 Пнд 15:44:00 23968932925
Бамп
Аноним # OP 08/02/21 Пнд 15:46:04 23968945526
Бамп
Аноним # OP 08/02/21 Пнд 15:53:16 23968988827
Бамп
Аноним # OP 08/02/21 Пнд 15:55:10 23969000428
Бамп
Аноним # OP 08/02/21 Пнд 16:02:03 23969046829
Бамп
Аноним # OP 08/02/21 Пнд 16:08:06 23969086230
Бамп
08/02/21 Пнд 16:16:34 23969145331
>>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
Аноним # OP 08/02/21 Пнд 16:28:59 23969227332
Roboto.png 11Кб, 256x128
256x128
>>239691453
Я сгенерировал картинку.png где есть разные глифы, так же вместе с картинкой сгенерировался файл где есть всякие оффсеты. Помоги пожалуйста вывести что-то из этой картинки. Я не знаю как её подгрузить и что с ней сделать.
Аноним # OP 08/02/21 Пнд 16:29:32 23969230633
Аноним # OP 08/02/21 Пнд 16:29:52 23969233434
Аноним # OP 08/02/21 Пнд 16:30:24 23969236835
image.png 72Кб, 509x614
509x614
Аноним # OP 08/02/21 Пнд 16:33:56 23969258936
Бамп
Аноним # OP 08/02/21 Пнд 16:36:07 23969273737
Бамп
Аноним # OP 08/02/21 Пнд 16:38:47 23969290838
Бамп
Аноним # OP 08/02/21 Пнд 16:49:34 23969361739
Бамп
Аноним # OP 08/02/21 Пнд 16:54:00 23969393540
Бамп
Аноним 08/02/21 Пнд 16:56:03 23969406641
Гоано ваш оупен жиэль. Бери ptx asm
Аноним # OP 08/02/21 Пнд 16:57:13 23969414342
Бамп
Аноним # OP 08/02/21 Пнд 17:01:15 23969440243
Бамп
Аноним # OP 08/02/21 Пнд 17:05:02 23969466944
Бамп
08/02/21 Пнд 17:05:05 23969467145
proof.png 21Кб, 526x332
526x332
>>239692273
и че тебе не понятно?
загружаешь текстуру в опенгл по любому примеру - да там альфа канал надо уметь его использовать, задавать формат корректный текстуре

>>239692368
что тут не понятно? в квадрате rect (x y w h) твоей картинки - лежит буква с символом code
че за оффсет - не ебу
> char width 16 offset 2 7 rect 1 1 12 18 code 0
наводящую картинку тебе сделал блять выделил нолик в ебаном фотошопе - ты сам такое не способен сделать?
Аноним # OP 08/02/21 Пнд 17:06:46 23969477146
>>239694671
Я не могу найти код как загружать из файла и отрисовывать эту текстуру
08/02/21 Пнд 17:09:43 23969495247
>>239694771
правильно - чтобы загрузить картинку из файла - нужно написать загрузчик или использовать готовую библиотеку - выбирай https://www.khronos.org/opengl/wiki/Image_Libraries
я не пойму - если ты нихуя не умеешь - какого хуя ты полез так далеко сразу?
че блять тебе мешало взять SDL2 например с SDL_ttf и SDL_image?
Аноним # OP 08/02/21 Пнд 17:15:03 23969528848
>>239694952
>че блять тебе мешало взять SDL2 например
Я делаю оверлей к OpenGL игре
08/02/21 Пнд 17:16:58 23969542049
>>239695288
а это опять ты - а игра майнкрафт да?
Аноним # OP 08/02/21 Пнд 17:25:08 23969598850
Аноним # OP 08/02/21 Пнд 17:27:48 23969618851
>>239695420
Помоги вывести хотя бы этот X из FreeType пожалуйста
Аноним # OP 08/02/21 Пнд 17:33:49 23969662852
Бамп
Аноним # OP 08/02/21 Пнд 17:39:27 23969708553
Бамп
Аноним # OP 08/02/21 Пнд 17:41:08 23969720954
Бамп
Аноним # OP 08/02/21 Пнд 17:42:53 23969732855
Бамп
08/02/21 Пнд 17:49:24 23969770956
>>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 зайти
Аноним # OP 08/02/21 Пнд 17:54:28 23969810157
>>239697709
Спасибо, сейчас попробую. А в чем разница между рисованием при помощи шейдера и таким рисованием? Я вроде бы так пробовал когда-то рисовать (скопипастил код) но ничего кроме белого квадрата не получил. А еще у меня в glOrtho размеры окна указаны в пикселях (типа width 1366)
Аноним # OP 08/02/21 Пнд 18:01:24 23969859758
image.png 40Кб, 567x556
567x556
>>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();
Аноним # OP 08/02/21 Пнд 18:07:28 23969897859
Бамп
Аноним # OP 08/02/21 Пнд 18:11:56 23969925360
image.png 33Кб, 516x488
516x488
>>239698597
Сделал вот так, на экране вообще ничего не появилось и сообщения об ошибке не было
Аноним # OP 08/02/21 Пнд 18:14:17 23969939861
>>239699253
А нет, видимо оно отрисовало текстуру размером в 1 пиксель в самом углу экрана
Аноним # OP 08/02/21 Пнд 18:16:58 23969955962
>>239699398
glTexCoord2f(0, 0); glVertex2f(0, 0);
glTexCoord2f(1, 0); glVertex2f(1, 0);
glTexCoord2f(1, 1); glVertex2f(1, 1);
glTexCoord2f(0, 1); glVertex2f(0, 1);

Помогите пожалуйста понять как это переделать чтобы отрисовало в координатах x и y 0, 0 по координаты 24, 24
Аноним # OP 08/02/21 Пнд 18:18:43 23969964263
>>239699559
Переделал на

\tglTexCoord2f(0, 0); glVertex2f(0, 0);
\tglTexCoord2f(24, 0); glVertex2f(24, 0);
\tglTexCoord2f(24, 24); glVertex2f(24, 24);
\tglTexCoord2f(0, 24); glVertex2f(0, 24);

Рисуется белый квадрат :(
Аноним # OP 08/02/21 Пнд 18:22:05 23969983264
Бамп
Аноним # OP 08/02/21 Пнд 18:23:15 23969990165
Бамп
Аноним 08/02/21 Пнд 18:23:51 23969994366
А вы в курсе, что мочух /h хуй сосет и ему все мало?
А его мать шлюху ебали 5 собак и она стонала как последняя блядь.
Аноним # OP 08/02/21 Пнд 18:28:57 23970026267
Бамп
Аноним # OP 08/02/21 Пнд 18:35:37 23970066768
Бамп
Аноним 08/02/21 Пнд 18:35:48 23970067869
>>239699253
что так сделал? где ты текстуру грузиьш этим кодом >>239698597
Аноним # OP 08/02/21 Пнд 18:42:52 23970116570
Аноним # OP 08/02/21 Пнд 18:48:16 23970154171
Бамп
Аноним # OP 08/02/21 Пнд 18:51:02 23970172572
image.png 17Кб, 519x290
519x290
>>239700678
Это разве не оно? Я беру буфер с face
Аноним # OP 08/02/21 Пнд 18:53:18 23970188573
БАМП
Аноним # OP 08/02/21 Пнд 18:53:50 23970192074
>>239701725
Я texture сделал глобальной но скрин сделал до этого
Аноним # OP 08/02/21 Пнд 18:57:44 23970217075
БАААМП
Аноним # OP 08/02/21 Пнд 19:04:16 23970260576
Я не понимаю что нужно добавить, помогите :(
Аноним 08/02/21 Пнд 19:06:54 23970276477
>>239702605
>>239701920
я у тебя спросил где ты это сделал а ты мне кусок опять кода показываешь
ГДЕ БЛЯТЬ ТЫ ЕГО ВЫЗЫВАЕШЬ пиздец это так сложно ответить?
контекст должен быть доступен а не "я вызвал функции опенгл где захотел мне поебать"
Аноним # OP 08/02/21 Пнд 19:09:03 23970292578
image.png 42Кб, 608x574
608x574
Аноним # OP 08/02/21 Пнд 19:09:35 23970296479
image.png 34Кб, 532x533
532x533
>>239702764
А вот это уже сама отрисовка
Аноним 08/02/21 Пнд 19:10:06 23970299180
>>239681691 (OP)
А вы в курсе, что мочух /h хуй сосет и в жопу принимает, и ему все мало?
А его мать шлюху ебали 48 собак и она стонала как последняя блядь.
08/02/21 Пнд 19:10:25 23970300381
>>239702925
ну и какого ты его там вызываешь?
контекст же не активен в данном потоке ептыблять
тебе нужно все делать в твоем свапбуферсе в т.ч. инициировать свои ебучие ресурсы
блять тебе че западло объявить глобалку BOOL init = true;
чтобы потом в swapbuffers
делать
if(init) {
// тут ты делаешь свои ебаные загрузки и разовое создание текстур
init = false; // один раз
}
Аноним # OP 08/02/21 Пнд 19:11:20 23970306782
>>239703003
Я думал что загрузку и создание текстуры можно делать откуда угодно. Почему так?
Аноним 08/02/21 Пнд 19:11:41 23970308683
>>239681691 (OP)
Для начала зарендери квадрат с текстурой глифов полностью, чтобы понять что он тебе их правильно генерит
Аноним # OP 08/02/21 Пнд 19:11:43 23970308884
>>239703067
Я думал что загрузку и создание текстуры можно делать откуда угодно, а отрисовку уже из свапбуферс*
08/02/21 Пнд 19:11:47 23970309185
знаешь оп да пашол ты впидзу пидор
какого хуя ты лезешь делать что-то не пытаясь начать с основ
какого блять хуя если ты базовых вещей ни опенгл ни хуков ни загрузки файлов нихуя не знаешь
ПОШОЛ НАХУЙ ПИДОР Я ОТПИСАЛСЯ ОТ ТВОЕГО ТРЕДА И БЛЯТЬ ЧТОБЫ Я ТЕБЯ НЕ ВИДЕЛ ТУТ БОЛЬШЕ
Аноним # OP 08/02/21 Пнд 19:12:02 23970310986
08/02/21 Пнд 19:12:04 23970311287
>>239703088
ИНДЮК ТОЖЕ ДУМАЛ А ПИДОРОМ ОКАЗАЛСЯ
Аноним 08/02/21 Пнд 19:12:29 23970313788
08/02/21 Пнд 19:12:40 23970315189
>>239703086
НИХУЯ У НЕГО НЕ БУДЕТ ТАМ ГЛЕРОР ОРЕТ ЕМУ ОШИБКИ ОН ИХ НЕ СМОТРЕЛ ДАЖЕ
Аноним 08/02/21 Пнд 19:13:42 23970321390
image.png 1277Кб, 794x798
794x798
Аноним 08/02/21 Пнд 19:14:34 23970326591
>>239703151
Ты че тред штоли читал? Че там?
Аноним # OP 08/02/21 Пнд 19:18:13 23970350292
>>239703003
То же самое

BOOL WINAPI __SwapBuffers(HDC hDC)
{
if (!init)
{
FT_Library ft;

if (FT_Init_FreeType(&ft))
std::cout << "ERROR::FREETYPE: Could not init FreeType Library" << std::endl;

FT_Face face;
if (FT_New_Face(ft, "Roboto-Regular.ttf", 0, &face))
std::cout << "ERROR::FREETYPE: Failed to load font" << std::endl;

FT_Set_Pixel_Sizes(face, 0, 24);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

if (FT_Load_Char(face, 'X', FT_LOAD_RENDER))
std::cout << "ERROR::FREETYTPE: Failed to load Glyph" << std::endl;

glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(
GL_TEXTURE_2D,
0,
GL_RED,
face->glyph->bitmap.width,
face->glyph->bitmap.rows,
0,
GL_RED,
GL_UNSIGNED_BYTE,
face->glyph->bitmap.buffer
);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, 0x812F);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, 0x812F);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

init = true;
}

GLint viewport[4];
glGetIntegerv(GL_VIEWPORT, viewport);

glPushAttrib(GL_ALL_ATTRIB_BITS);

glDisable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, 0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(viewport[0], viewport[2], viewport[3], viewport[1], -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glDisable(GL_DEPTH_TEST);
glDisable(GL_CULL_FACE);


glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex2f(0, 0);
glTexCoord2f(24, 0); glVertex2f(24, 0);
glTexCoord2f(24, 24); glVertex2f(24, 24);
glTexCoord2f(0, 24); glVertex2f(0, 24);
glEnd();

glPopAttrib();
return _SwapBuffers(hDC);
}
08/02/21 Пнд 19:19:33 23970357793
>>239703502
Братан, уёбывай с этим говном в прогроммач, там есть специальный тред для альтернативно одарённых маслят.
Аноним # OP 08/02/21 Пнд 19:22:48 23970379594
>>239703577
Там очень редко кто-то отвечает
08/02/21 Пнд 19:25:01 23970394295
>>239703795
Ну так ты сам хоть что-то сделай для начала, но даже совсем маслятам изредка что-то пишут
Настройки X
Ответить в тред X
15000
Макс объем: 20Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
X
Ваш шидевор X
Стикеры X
Избранное / Топ тредов