Главная Юзердоски Каталог Трекер NSFW Настройки

Gamedev

Ответить в тред Ответить в тред
Check this out!
<<
Назад | Вниз | Каталог | Обновить | Автообновление | 513 82 208
OpenGL thread 7 Аноним 27/06/20 Суб 09:02:43 678945 1
image.png 134Кб, 1296x758
1296x758
Рисуй треугольник!
Треугольник сам себя не нарисует!

Спрашиваем, сами же решаем проблему, сами же отписываемся. Постим книжечки, гуглим, учим математику. Посылаем нахуй за легаси.
Читаем шапку перед тем как задать очередной тупорылый вопрос.

Добро пожаловать. Снова.

Шапка треда:
https://gist.github.com/2ch-gd-opengl/26b94fc6f16100af730d84a3d8bbd557
Аноним 27/06/20 Суб 09:11:41 678946 2
Перекатил чтобы задать вопрос.
Пишу ray casting игру на sdl2, но увы, она не тянет 7к полигонов даже на этапе поиска пересечений. Посмотрел на glsl и это то, что мне нужно - описываешь входные вектора, что-то с ними делаешь и возвращаешь выходные. Но проблема в том, что все гайды, которые я видел, рисуют треугольники а не проводят вычисления на видеокарте.
Я бы хотел загрузить все полигоны в видеопамять и когда нужно, запускать glsl код, который будет принимать лучи, а возвращать координаты пересечений лучей с полигонами, чтобы я через sdl2 наложил текстурки. Как это сделать?
Аноним 27/06/20 Суб 16:05:53 678987 3
>>678946
> Я бы хотел загрузить все полигоны в видеопамять и когда нужно, запускать glsl код, который будет принимать лучи, а возвращать координаты пересечений лучей с полигонами, чтобы я через sdl2 наложил текстурки. Как это сделать?

Тебе скорее всего надо надо треугольниками оперировать, а мешами (наборами треугольников). Лучи пересекают меш - записываешь в какой-нибудь массив baseVertex этого меша, а потом glDrawElementBaseVertex где последний аргумент и есть тот baseVertex

Хотя это уже не рейкастинг совсем
Короче, проще найти готовый пример
Аноним 27/06/20 Суб 16:35:11 678994 4
Аноним 28/06/20 Вск 12:32:35 679117 5
Аноним 29/06/20 Пнд 19:54:36 679413 6
>>679117
OpenGL сам за тебя выбирает, куда писать данные. А static/dynamic draw — просто подсказки для OpenGL.
Аноним 23/07/20 Чтв 19:31:58 684666 7
>>678945 (OP)
Ты почему о перекате в предыдущем треде не сообщил?

...хотел задать вопрос, но пофиг уже
Аноним 23/07/20 Чтв 21:50:54 684724 8
Аноним 24/07/20 Птн 07:54:58 684867 9
Аноним 24/07/20 Птн 07:56:10 684868 10
>>678946
>Перекатил чтобы задать вопрос
Долбоеб, а в предыдущем треде объявить не мог?
Аноним 24/07/20 Птн 15:23:56 684957 11
>>684868
Кстати двачую - была идея переименовать в тред графических технологий (сразу для всех opengl/directx и других api), и чтобы тут же разбирались детали реализации всяких теней/отражений. Тред отдельно по opengl не нужен.
Аноним 27/07/20 Пнд 15:06:27 685868 12
Для Opengl pipelines (glGenProgramPipelines) можно задавать отдельно стейты вроде блендинга, куллинга и т.д., как в вулкане или эта шняга только для шейдерных стадий. Рендер стейт по прежнему один и глобальный?
Аноним 28/07/20 Втр 11:29:45 686156 13
>>678946
Вычисления на видеокартах с помощью шейдеров называется GPGPU. Гугли opengl gpgpu example или типа того.
А вообще для вычислений на картах нормальные люди используют openCL или cuda если поддерживается.
Аноним 28/07/20 Втр 12:08:36 686169 14
>>686156
>openCL
Выдаёт на 30% меньшую производительность, чем вычислительный шейдер. Можно просто один в один скопировать код и размеры всяких рабочих групп. Это было на древней нвидия-карточке десятилетней давности, и я думал что это просто потому что opencl был в новинку - но даже на свежей карточке прошлого года со свежим драйвером такой же результат.
Аноним 28/07/20 Втр 12:18:49 686170 15
Антуаны, а где почитать по пайплайну?
Мне нужен форвард/деверенд, шобы заебись было, но я в душе не ебу где про это читать. А может кто-то за меня написал отдельную либу пайплайна? Или нужно воровать код у существующих движков?
Аноним 28/07/20 Втр 12:28:20 686173 16
>>686169
Ну, зависит от задачи, и одинаковый код не факт что будет хорошо работать и там и там. Для СЛ-я мб эффективнее юзать какие-то встроенные функции.
Аноним 28/07/20 Втр 12:49:55 686183 17
>>686173
Было бы интересно посмотреть хоть на одну задачу, где cl выдаст более хорошие результаты. Там даже матриц вроде как нет и нужно вручную их делать.
Аноним 28/07/20 Втр 16:27:21 686257 18
Аноним 02/09/20 Срд 00:19:29 696795 19
Как установить это говно на шинду? Я проебался с линковкой 4 часа.
Аноним 02/09/20 Срд 01:50:31 696807 20
>>696795
Разобрался. Завтра ждите от меня движок нового поколения.
Аноним 02/09/20 Срд 22:57:27 696939 21
Аноним 03/09/20 Чтв 00:37:48 696964 22
>>696939
Так, пока можно задавать цвет бекграунда.
Завтра буду писать обертки под draw линий и меши. А потом учить прогу их грузить с файлов.
Аноним 04/09/20 Птн 16:20:31 697246 23
Посоветуйте литературу по линейной алгебре.
05/09/20 Суб 14:04:27 697335 24
>>697246
Нашёл из прошлого треда.
Аноним 02/10/20 Птн 16:32:26 701849 25
Ну что, треугольниковёрты? Нашли уже работу мечты? Разрабатываете ли моднейший кластерный рендерер на вулкане? Пишите ли будоражащие вайтпаперы для сигграфа? Похвастайте хоть.
Аноним 02/10/20 Птн 21:02:06 701907 26
>>701849
Освоил опенгл достаточно чтобы делать свою говно-игру без обёрток в виде движков.
Аноним 25/10/20 Вск 23:57:49 706329 27
Reticulating Splines...
Аноним 28/10/20 Срд 22:43:43 706851 28
>>701849
Мне вообще не доставляет, забил хуй на это говно
Аноним 29/10/20 Чтв 14:43:02 706914 29
>>706851
How dare you!
CG - вообще единственная смывов, оправдывающая кодинг.
Аноним 29/10/20 Чтв 16:27:41 706930 30
>>706914
> смывов
Нихуя я косой, сразу не заметил, а теперь и не знаю, что за слово должно было быть.
Короче - только cg и оправдывает унылое байтоёбство.
Аноним 29/10/20 Чтв 16:53:47 706934 31
>>706851
Сам ты говно. Что ты тут делаешь, раз забил?
Аноним 30/10/20 Птн 12:50:00 707042 32
>>706914
Что оправдывающая? Тебе нравится смотреть на вращающийся кубы? Оргазм получаешь? Или тебе нравится делать свой велосипедный движок и смотреть как коряво он работает? Тоже наслаждение внеземное получаешь ? (ты ведь сам его сделал! Какой ты молодец! И совсем не говно получилось!)
Аноним 30/10/20 Птн 14:52:35 707076 33
изображение.png 103Кб, 1020x795
1020x795
заебумбыч
Аноним 30/10/20 Птн 16:21:06 707084 34
>>707076
Ты новичок? Теперь учи как делать карты теней. Сам же видишь, что свет попадает туда где его не должно быть.
Аноним 31/10/20 Суб 14:40:28 707190 35
>>707084
Нет, я не семейство фторфосфорорганических азоторганических отравляющих веществ нервно-паралитического действия
Аноним 12/11/20 Чтв 18:58:24 709310 36
>>707042
Всё так: люблю вращать кубы и руками собирать сраные икосаэдры, покрывать их жырным слоем кривых шейдеров с циклами и динамическими ветвления ми. Густо поливать подливой теней с алиасингом и акне, медленным ссао и шумными фейковыми отражениями.
А разве вы не любите?
Аноним 13/11/20 Птн 18:23:30 709508 37
Аноним 13/11/20 Птн 18:47:06 709519 38
Аноним 13/11/20 Птн 18:50:24 709521 39
>>709310

> руками собирать сраные икосаэдры

Тебе кроносы дали glTF, пердоль!, Пердоль, блядь, нет не хотим, хотим руками из байтов флотами сладкий хлеб набирать.
Аноним 14/11/20 Суб 10:54:03 709638 40
>>709519
Как раз хотел вебгл начать изучать. Разобрался с основами шейдеров тут thebookofshaders.com
Аноним 14/11/20 Суб 14:14:37 709665 41
>>709638
> thebookofshaders.com
Хуита недописанная.
Аноним 14/11/20 Суб 15:35:38 709677 42
Аноним 14/11/20 Суб 17:01:20 709705 43
Аноним 17/11/20 Втр 12:04:21 710156 44
>>709705
Неплохо! Наверное. А что нибудь в нормальном, текстовом виде есть?
Аноним 17/11/20 Втр 12:06:45 710158 45
Пишу по туториалу, там у чувака не GLFW, а у меня GLFW. Он начал писать профайлер, у него время кадра меньше миллисекунды, а у меня - 16 мс. Этот фреймлок в ОпенГЛе выставляется или в GLFW?
Аноним 17/11/20 Втр 13:17:35 710183 46
Аноним 17/11/20 Втр 13:18:17 710184 47
>>710158
Похоже у тебя vsync включается по дефолту. glfwSwapInterval(0) поставь в месте, где контекст настраиваешь.
Аноним 18/11/20 Срд 23:52:35 710377 48
kal.mp4 20781Кб, 640x640, 00:00:43
640x640
Бампану своим шейдером
Аноним 22/11/20 Вск 17:04:25 710982 49
Управление ресурсами.
Кто как задумывался над этим? Самый простой способ это делать классы текстур, буферов, шейдеров и тд.
Но потом придётся думать над копированием и уничтожением объектов.
А тут как-то раз решил почитать исходники месы (драйвер свободный для графики) и натолкнулся на мысль, что управление ресурсами можно попробовать не раздавать разным классам, а делать всё в одной (GLContext или типа того). Он же может и следить также за учётом ссылок.
Аноним 24/11/20 Втр 18:11:03 711319 50
Аноним 24/11/20 Втр 18:14:17 711320 51
Аноним 24/11/20 Втр 19:05:56 711328 52
>>711320
Нет. Для этого нужна DirectStorage API (часть DirectX), и то она будет доступна только в следующем году.
Аноним 24/11/20 Втр 19:13:29 711329 53
>>711319
Ты ослеп или одурел?
Аноним 24/11/20 Втр 19:57:55 711332 54
>>710982
У меня в графическом движке есть просто структуры (классы) для текстур, которые содержат указатель на данные и их формат (ширина, высота, байт/флоат). Когда используется опенгл-бекенд, он на лету подхватывает текстурки и если у них нет GLuint текстуры, то генерирует и юзает её. При удалении текстурки вызывается коллбек опенгл-бекенда, удаляющий GLuint имя текстуры.
Аноним 24/11/20 Втр 20:27:36 711336 55
>>711332
ты умеешь смотреть сколько памяти на видяхе юзается?
Аноним 24/11/20 Втр 21:58:05 711358 56
>>711328
Это из-за того, что у нвидии проприетарные драйвера?
Аноним 24/11/20 Втр 22:53:47 711360 57
>>711358
>Это из-за того, что у нвидии проприетарные драйвера?

Это из-за того что МС сама башляет бабки вендорам, сама продвигает и контролирует.

А кронос - это джентельменский клуб для попиздеть и изобразить антимонопольную альтернативу.
Аноним 30/11/20 Пнд 15:15:32 712254 58
Аноним 30/11/20 Пнд 22:12:16 712345 59
Как вкотиться из дженерик байтоёбство в пиксельебство?
Написать свой разудалый говнофреймворк с парой тройкой модных технологий и форсить на собесах гитхабом? Дрочить теорию и надеяться, что проскочишь, а там какнить втянешься?
Аноним 01/12/20 Втр 00:16:56 712359 60
Аноним 01/12/20 Втр 08:48:55 712395 61
>>712359
Пушто некоторым тяжело работать в столь абстрактной сфере, как программинг без визуализации своих трудов.
Кому-то норм херачить в банках и перекладывать цифири в бездонных бэкэндах. Кому-то прельстиво, если их код имеет визуальный результат.
Если персонально: работал над десктопными приложениями для отображения инфы аля убогий ГИС. И в бекенде работал. Второе невероятно печальнее, хоть и понимаешь, что дело может и даже более полезное, чем первый случай.
Такие дела, байтаны.
Аноним 01/12/20 Втр 10:53:13 712406 62
>>712395
Ты хочешь поменять одно низкоуровневое говно на другое. Сказано же, что в вулкане надо 1000 строчек, чтобы треугольник нарисовать. По-твоему это весело?
Аноним 01/12/20 Втр 11:08:31 712407 63
>>712406
>Сказано же, что в вулкане надо 1000 строчек, чтобы треугольник нарисовать
Только это не правда.
1к строк кода - создают устройство, проверяют технические фичи, создают слои, и т.д. и т.д. То есть не имеют никакого отношения к выводу треугольника
Аноним 01/12/20 Втр 13:28:50 712411 64
>>712407
Тем не менее, человеку с опытом в бэке (востребованном и хорошо оплачиваемом) вкатываться с нуля в область сложную и не нуждающуюся в большом количестве кватывальщиков, как-то не разумно.
Аноним 01/12/20 Втр 17:22:32 712429 65
>>712411
Если хочешь не сойти с ума от выжигания глазонек, то в один непрекрасный момент придётся задуматься о выборе денежка vs уровень радости от работы.
Зря чтоль об этом вашем выгорании столько написано.
Аноним 01/12/20 Втр 18:57:30 712441 66
>>712429
Я считаю, что выгорание происходит не от того, чем ты занимаешься, а от того, насколько интенсивно ты этим занимаешься, и таким образом выгореть можно от чего угодно, хоть от байтоебства, хоть от типа "творческой" 3д графики.
>Зря чтоль об этом вашем выгорании столько написано.
А сколько еще написано о рабах геймдев индустрии, перерабатывающих сверх нормы за несопоставимо низкую зарплату.
Аноним 01/12/20 Втр 21:58:13 712479 67
>>712441
Так за гейдев я и не радею. Есть более практичные сферы, связанные с визуалом типа тренажёрных систем. Проблема, что таких продуктов на порядок меньше перекладывания чиселок.
Аноним 02/12/20 Срд 01:26:29 712501 68
Аноним 02/12/20 Срд 01:36:30 712503 69
>>712479
Работаю в таком, задачи действительно интересные, как по мне. Единственное что раздражает это требования по поддержке довольно древнего железа.

Бтв насчёт того что визуальный результат приятнее не согласен. Базы данных/распределенные хранилища(и другая байтоебля) тоже очень классно, хотя опыта у меня в этом у меня меньше. Мне кажется в бекенде скучно делать какую-нибудь бизнес логику, бесконечное прокидывание всякого от бека к фронту.
Ещё у меня ненависть к парсерам, но кому-то вроде нравится...
Аноним 02/12/20 Срд 11:47:47 712548 70
>>712503
Так дай совет по вкату.
Аноним 17/12/20 Чтв 02:47:49 715328 71
>>712548
Хз, изучаешь то что интересно, подаешься на вакансии куда интересно, если нет привычки решать задачки на время может быть полезен литкод или аналоги
Аноним 18/12/20 Птн 05:18:06 715508 72
Пилю скелетную анимацию, возникли проблемы с моделями для теста. У меня нет пока загрузчика, а писать свой крайне лениво до момента, пока не получу рабочий код постановки меша в позу

Где можно взять простую заскиненную модельку + скелет из пары костей в читабельном для человека виде для отладки?
Аноним 18/12/20 Птн 05:27:55 715509 73
>>715508
Ладно похуй возьму из головы/напишу экспортер для блендера
Аноним 18/12/20 Птн 06:07:16 715511 74
>>715508
sketchfab например, отфильтруй по бесплатным моделям

>>715509
Прикрути assimp или fbx sdk, это не сложно. У fbx sdk громоздкий api, но в комплекте есть пример как прочитать из файла все что в нем есть.
Аноним 04/01/21 Пнд 12:22:20 718387 75
Допустим я рисую одну картинку просто треугольниками, а вторую генерирую фрагментым шейдером при помощи реймаршинга, вместе с depth буффером.
Как мне наложить вторую картинку на первую, используя её depth-буфер?
Аноним 05/01/21 Втр 11:30:18 718544 76
>>718387
Как ты пишешь в depth buffer? Это условный буффер, то есть просто текстура или АПИшный depth buffer?

>Как мне наложить вторую картинку на первую, используя её depth-буфер?
Просто рисуй дополнительным проходом и используй в нем картинку реймарчинга в качестве текстуры и сэмплевай с нее. Я не знаю на сколько у тебя там сложная сцена, но вообще ты это можешь одним проходом рендерить. После того как отрисовал основную сцену, следует дравкалл квада для реймарчинга. В этом случае не надо к нему текстуру привязывать, а можешь сразу в фрагмент шейдере реймарчить. При этом читай актуальную глубину пикселя из до этого отрисованой сцены и сравнивай ее с глубиной куда попал реймарч. Если глубина меньше, заначит рисуешь пиксель реймарчинга, а если нет, то просто пропускаешь пиксель с discard;
Аноним 05/01/21 Втр 12:08:34 718551 77
>>718387
Еще забыл добавить: Перед дравкаллам квада для реймарчинга отключи тест глубины с glDisable(GL_DEPTH_TEST), чтобы не было проблем с рисованием поверх. Глубину ты и так сам в фрагмент шейдере тестишь. Потом в цикле перед основной сценой не забудь снова включить glEnable(GL_DEPTH_TEST).
Аноним 05/01/21 Втр 19:32:44 718651 78
16094023778260.png 2Кб, 64x32
64x32
У меня вопрос, допустим нужно нарисовать тайл пикрил без сглаживания. Если его рисовать методом обычного спрайта в виде квадратной сетки вершин, то он рисуется нормально, если же сетка вершин будет подогнана под форму, то на краях образуется сглаживание краёв. Вопрос как сделать чтобы нормально он рисовался без сглаживания? Сделать сетку на 1 пиксель больше? И вообще интересно насколько оптимизация по форме спрайта влияет на производительность?
Аноним 06/01/21 Срд 02:29:28 718740 79
>>718387
Во фрагментном шейдере стреляния лучами, просто запиши глубину в gl_FragDepth.
Аноним 06/01/21 Срд 09:44:04 718764 80
>>718387
Ты уже разобрался? Напиши хоть, что конкретно ты делаешь или скриншот выложи.
Аноним 06/01/21 Срд 13:18:43 718802 81
>>718651
Что у тебя там сглаживается? MSAA что ли включил? Или ты хочешь типа пиксель-арт стайл? Тогда в функцие glTexParameteri() поставь у мин и маг фильтра последний параметр на GL_NEAREST вместо GL_LINEAR. Сделай скриншот, так будет понятнее, что у тебя там не так.
Аноним 06/01/21 Срд 13:20:47 718803 82
>>718764
Пока не занимался этим. Я просто не сразу подумал, что можно сразу в реймаршинг-шейдере глубину проверять. Через gl_FragDepth или юниформить текстуру с глубиной в шейдер, потом разберусь и, может, скриншот выложу.

Вообще я хотел для своей следующей игры вокруг некоторых объектов сделать полупрозрачные сферы и другие объекты, между которыми происходит smooth union и они слипаются.
Аноним 09/01/21 Суб 13:10:33 719497 83
out.mp4 17375Кб, 1460x860, 00:00:33
1460x860
>>718764
Сделал. Конечно, офигел от этого всего, джва часа разбирался куда что прикрепить. В связи с особенностями моих графического и ГУИ движков сделал так: рендерю в квадрат, закрывающий весь экран реймаршинг сцену, при этом передаю ей текстуру, в которую срендерил depth buffer основной сцены.
Зато теперь можно сделать красивые эффекты. И вообще, я раньше не думал о том, что можно вот так миксить быструю опенгл-сцену и красивую реймаршинг-сцену.
Аноним 10/01/21 Вск 19:25:20 719816 84
>>719497
Прикольно смотрится. Можешь еще немного фонга на эти сферы добавить. Нормали сферы в реймарчинге легко высчитываются: точка поверхности - центр сферы = вектор нормали. А дальше фонг шейдинг как в обычном шейдере.

>И вообще, я раньше не думал о том, что можно вот так миксить быструю опенгл-сцену и красивую реймаршинг-сцену.
Ну собственно еще есть компьют шейдеры, в которых можно сложные эффекты просчитывать, а потом совмещать с обычным фреймбуфером, в том числе реймарчинг и рейтрейсинг.
Аноним 11/01/21 Пнд 14:13:53 720016 85
out0.mp4 3289Кб, 1460x860, 00:00:07
1460x860
out1.mp4 3726Кб, 1460x860, 00:00:08
1460x860
>>719816
Да, фонг это хорошо, но для моего эффекта не подходит, слишком перегруженным кажется.
И в реймаршинг же нормали вычисляются одинаково для всей сцены:
vec3 SceneNormal(vec3 ori) {
return normalize(vec3(SceneSDF(vec3(ori.x + NORM_EPSILON,ori.y,ori.z),vec3(0,1,0)).d - SceneSDF(vec3(ori.x - NORM_EPSILON,ori.y,ori.z),vec3(0,1,0)).d,
SceneSDF(vec3(ori.x,ori.y + NORM_EPSILON,ori.z),vec3(0,1,0)).d - SceneSDF(vec3(ori.x,ori.y - NORM_EPSILON,ori.z),vec3(0,1,0)).d,
SceneSDF(vec3(ori.x,ori.y,ori.z + NORM_EPSILON),vec3(0,1,0)).d - SceneSDF(vec3(ori.x,ori.y,ori.z - NORM_EPSILON),vec3(0,1,0)).d));
}
Аноним 11/01/21 Пнд 20:01:09 720087 86
>>720016
>И в реймаршинг же нормали вычисляются одинаково для всей сцены
То что я панисал, это быстрое решение для обычной сферы. А твоя жирная функция с шестью сэмплами высчитывает нормаль с помощью градиента. Ну для сложной геометрии только так, да.

Не по теме: у тебя камера дерганая из-за резких движений мышки. На видео это не приятно смотрится в качестве презентации. Для плавного передвижения камеры ты можешь добавить управление аналог-стиками геймпада. Или для клавомыши захуячить свой алгоритм сглаживания движения камеры. Мы же любим свои велосипеды писать, правильно? :)
Аноним 12/01/21 Втр 09:22:21 720186 87
Изучаю Batch Rendering
и у меня вопрос по поводу функций:
glGenVertexArrays и glCreateVertexArrays
какие в них различия?
Аноним 12/01/21 Втр 12:24:19 720225 88
Аноним 13/01/21 Срд 10:45:10 720419 89
Вопрос по поводу матриц, где их лучше считать? Просто у меня вычисления в коде и в шейдер передаётся уже итоговая матрица, у других же наоборот, в шейдер передаются несколько матриц и они там считаются.
Аноним 13/01/21 Срд 13:04:49 720459 90
>>720419
Твой вариант лучше, т.к. видеокарта не считает n раз одну и ту же матрицу, берет готовую. Обычно у других матрицы комбинируются по всякому и их для этого передают раздельно
Аноним 14/01/21 Чтв 10:42:56 720638 91
Изучаю Cherno и у него там есть пример
https://www.youtube.com/watch?v=bw6JsLnx5Jg&list=PLlrATfBNZ98f5vZ8nJ6UengEkZUMC4fy5&index=3
шейдер вида:
uniform sampler2D colorTexture[2];
Код:
glBindTextureUnit(0, texture1);
glBindTextureUnit(1, texture2);
Но как я понял это под 4.5 версию работает, у меня же 4.3.
Как биндить текстуру в нужный текстурный слот на моей версии?
Аноним 14/01/21 Чтв 10:52:55 720642 92
>>720638
Кажется разобрался как надо:
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture1);

glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texture2);
Аноним 14/01/21 Чтв 19:34:14 720735 93
>>720638
>Cherno
Наш человек кстати.
Аноним 16/01/21 Суб 19:55:37 721501 94
>>720735
Персонаж фильма "вратарь галактики"?
Аноним 17/01/21 Вск 01:18:15 721652 95
Аноним 21/01/21 Чтв 19:36:24 722865 96
Сап графончики, я тут внезапно решил обмазаться ретро OpenGL'ем, ну там fixed pipeline, draw lists, GL_ARB_texture_env_combine и так далее. Прост сделать пару демок на Си, посмотреть чем деды увлекались в годы моего детства. Посоветуйте годных мануалов? Гугл выдаёт кучу битых ссылок, с трудом нашёл рабочий архив NeHe и ещё поглядываю на демки humus.name. Но чёт не густо. Может есть какие-то олдскульные книги на эту тему? Уверен тогда только так делились инфой. Сейчас пытаюсь найти первые издания OpenGL Red Book. Есть смысл? Или везде только шейдеры и тому подобное?
Аноним 22/01/21 Птн 23:43:44 723157 97
>>722865
"Расширения OpenGL" погляди, там есть асм-подобные шейдеры и даже nv_register_combiners, и только потом переход к легаси-версиям glsl. Она за 2005 год вроде бы.
>обмазаться ретро
Если совсем ретро по типу gluNurbsSurface - то такое я только в красной книге видел, и я листал вот эту или очень похожую версию: https://studfile.net/preview/2807154/
Аноним 22/01/21 Птн 23:45:33 723165 98
>>722865
А, да, ещё книга Краснова по opengl для делфи.
К ней ещё архив с демками есть, вот с этими буферам выбора и другими функциями которые никто никогда и нигде не использовал.
Аноним 24/01/21 Вск 05:20:11 723431 99
>>723157
Спасибо что напомнил о Борескове, анончик. Нашёл всё что нужно у него на сайте в разделе старых статей.
Аноним 25/01/21 Пнд 13:18:24 723670 100
>>722865
Чем бы человек не обмазывался, лишь бы...

Изучать OGL старых версий в 2021-м году - это стрелять себе в ногу. OGL 3.1 не просто так родили на свет. Везде уже только шейдеры, только хардкор. Можно конечно почитать чего там творили в прошлом и как выкручивались с multitexture extension для блендинга нескольких текстур для одного материала без использования шейдера. Но это все уже далеко далеко в прошлом.

ПС: отдельный изврат без четкого определения - это использовать расширение для шейдеров и при этом продолжать пользоваться FFP функциями. В 2009-м году - прокатывало.
Аноним 26/01/21 Втр 12:44:53 723835 101
>>723670
Пост не читал, лишь бы ответить? Пчел явно обозначил, что он осознанно именно fixed function хочет потеребонькать. Почему? Ради лулзов, очевидно.
Аноним 26/01/21 Втр 13:43:31 723840 102
Аноним 27/01/21 Срд 04:20:12 723954 103
>>723670
Вот ты душнила, я задал конкретный вопрос, даже цель описал да, для лулзов. Но нет, надо вставить свой охуительный совет. Чего сразу не написал что "в 2021-м году кодать -- это стрельба себе в ногу, игру надо мышкой на готовых ассетах в Юнити делать"?

>>723835
Двачую, именно что для лулзов.

>>723840
Окей, с дедами загнул конечно.
Алсо по ссылке как раз OpenGL, возможно ты хотел запостить какие-то софтварные рендеры или рейкастер какой?
Аноним 27/01/21 Срд 11:05:18 723965 104
>>723954
>Алсо по ссылке как раз OpenGL, возможно ты хотел запостить какие-то софтварные рендеры или рейкастер какой?
Да, объебался немного - ОпенГЛ тогда был, но MGL и без него работает.
Аноним 29/01/21 Птн 05:00:12 724265 105
Аноним 29/01/21 Птн 12:09:49 724286 106
comp-graphics-1[...].jpg 137Кб, 866x1200
866x1200
Аноним 02/02/21 Втр 22:45:14 725552 107
GLRED.png 314Кб, 920x1280
920x1280
Сап, ананасы.
Посвящаю сегодня эту хуйню самому себе, разработчикам стандарта, и всеобщей борьбе жабы с гадюкой.
Аноним 03/02/21 Срд 01:50:42 725612 108
>>725552
велкам ту опенгл
Аноним 03/02/21 Срд 01:52:15 725613 109
>>725552
вообще не представляю как этим говном можно пользоваться без тайпсейф обертки какой-нибудь
Аноним 03/02/21 Срд 11:36:39 725660 110
>>725613
Какая обертка за меня проставит все параметры при аплоаде текстуры?
Аноним 04/02/21 Чтв 14:56:14 725936 111
Анонче, где сейчас пишут шейдеры руками и можно ли как-то профит с этого получать? Не так давно нашёл канал The Art of Code, где показывают и объясняют как делать эффекты на GLSL, запуская это всё в Shadertoy. Посмотрел пару видео оттуда, что-то свое даже получилось сделать, хочу продолжить, или же это говно без задач на данный момент?
Аноним 07/02/21 Вск 08:28:06 726348 112
>>725936
Везде пишут. Когда в уе или юнити ты создаешь материалы, ты по сути пишешь шейдеры.
Аноним 08/02/21 Пнд 04:10:01 726555 113
>>725660
Вообще в glbindings вроде бы енумы вместо макросов, но не уверен, не юзал.
А вообще похуй, это не самое хуевое
Аноним 17/02/21 Срд 22:04:15 728269 114
изображение.png 25Кб, 544x298
544x298
Всё что нужно знать про компилятор glsl на этой картинке.
Я что-то переписывал, и обнаружил что сильно фпс просел, хотя я ничего не менял. А там вот оно что.
То что побеждает четвёртый вариант это вообще какая-то петрушка.

Кто-нибудь может объяснить почему разница в два раза? Там же регистры сразу vec4 содержат, по идее - и ему без разницы умножать float или умножать vec4 на -1.


А ещё если в коде есть uniform и я его не использую, то glGetUniformLocation выдаёт -1 (ошибку), как будто юниформа не существует.
И если он входит в какое-то выражение с умножением на ноль по типу float y=x+0⚹<uniform> - то glGetUniformLocation так же выдаёт -1.
Аноним 17/02/21 Срд 22:17:12 728270 115
>>728269
Да, ещё хотел спросить - glGetUniformLocation достаточно оптимизированный (кеширует имена-номера в хеш-таблице) и я могу его каждый кадр вызывать, или лучше сохранить полученный номер и обращаться по нему?
компилятор GLSL Аноним 18/02/21 Чтв 03:11:53 728301 116
>>728269
Добавлю ещё.

Перенёс определение знака нормали в геометрический шейдер, и остались те же 37 с хвостиком фпс, то есть последний вариант для карточки то же самое, как и просто множить vec3 на float без проверок.

Ещё если использовать (gl_FrontFacing?1:-1)⚹nor - 32 фпс, если поменять на (gl_FrontFacing?1.0:-1.0)⚹nor - 37 фпс.
Это просто форменный беспредел.


Я смотрю на компилятор с++, который мне деление на 7 заменяет на комбинацию imul/sar/shr, а потом на это, где абсолютно (и самое главное численно) эквивалентный код работает с разницей больше чем в два раза по времени, и...
Это в самом деле нужно смотреть на все шейдеры и заменять условия и тернарный оператор на функцию хевисайда?
Аноним 18/02/21 Чтв 10:57:17 728331 117
>>728269
Четвертый вариант побеждает потому что терарнарный оператор = branching. А branching мобильные GPU не любят
Аноним 18/02/21 Чтв 11:01:06 728334 118
>>728301
>Это просто форменный беспредел.
Скорее всего теряется fps на преобразовании int во float.

Пробуй сделать как в четвертом варианте у тебя вот здесь >>728269
но вместо int(gl_FrontFacing) сделай float(gl_FrontFacing). По идее это еще тебе fps подкинет за шиворот
Аноним 18/02/21 Чтв 12:26:24 728347 119
>>728269
>>728270
>>728301
1) Я правильно понимаю, что ты рисуешь двусторонние грани? Если так, то зачем? Просто в большинстве случаев это двойной overdraw. (Хотя это может быть система частиц?)
2) На каком устройстве ты все это запускаешь?
2.1) Компилятор glsl в принципе моложе чем gcc, и у каждого вендора он запросто будет собственный.
2.2) Даже в рамках одного вендора могут быть разные результаты на чипах разных поколений.
3) Функция Хевисайда - гуд. Step в glsl - существует с 1.20, следовательно сегодня может быть даже выполняется с одного опкода в АЛУ, хрен его знает, но если сокращает время вычислений - так даже лучше.
4) Про неиспользованные юниформы и -1 вместо location - да, регулярно наступал на эти грабли, тут компилятор glsl (по крайней мере на nvidia) оптимизирует, сука, тупо вырезая то, что не вносит вклад (в том числе умножается на ноль), поэтому когда я пишу шейдер с кучей входных параметров, то сначала я их все сваливаю в сложение в одну переменную, которую затем умножаю на эпсилон и прибавляю к результату.
5) Про float и int - да, печалька, что компилятор не делает автоматическое приведение констант к типу левой части. Я с давних пор пишу как завещал дедушка Кармак: везде где требуется вещественный тип - число пишется полностью, т.е. так - 1.0f.
6) Про GetUniformLocation:
6.1) Пруфов не будет, где-то читал, что тривиальные части состояния (т.е. не буферы, и не то, что вычисляется только на видеокарте) современный драйвер хранит у себя и возвращает не запрашивая устройство, но не очень в это верю и предпочитаю нужные части кешировать в своем приложении, все равно цепочка вызовов будет короче.
6.2) А зачем вообще его вызывать каждый кадр? Ты каждый кадр компилируешь программу заново из динамически составленных исходников? Сделай класс или структуру, которая будет хранить location вместе с хэндлдом шейдерной программы, ты же где-то и так его хранишь.
Аноним 18/02/21 Чтв 16:37:26 728430 120
>>728334
>Скорее всего теряется fps на преобразовании int во float.
А зачем оно преобразует int во float? Компилятор с++ даже с -O0 подменяет int на float сам (там в обоих функциях загружается .LC0). Какая мотивация чтобы оставлять в шейдере int целочисленным числом, а не преобразовать по максимуму в конечный тип?
А если я там напишу (5+6+4) вместо (15) он тоже считать это будет каждый кадр? Нет, такое вроде бы сворачивает.

>float(gl_FrontFacing)
Уже попробовал, ничего не меняется.
Я же написал, что я в фрагментном шейдере вовсе убрал обращение к gl_FrontFacing (считаю знак нормали прямо в геометрическом) - и фпс те же 37, выше уже не подняться.


>>728331
Так оно само считает обе ветви и подставляет результат похожим способом. Третий вариант совпадает по фпс с четвёртым (после замены 1 на 1.0).


>>728347
1 - Листья на ветках.
2 - 1660 ti. Вообще было бы очень интересно, чтобы кто-то в шейдере поставил такую же заглушку и потестил так же у него работает компилятор glsl или нет. У меня есть другой комп постарше, но карточек амд у меня вовсе нету, чтобы проверить что на них.

2.1 - Предположу что ситуация такая же как с openCL. Ты можешь один в один одинаковый код написать на openCL и на куде/glsl (в вычислительном шейдере) - и openCL будет работать где-то в 1.3 раза медленнее. С одинаковым размером локальных групп и всем остальным полностью совпадающим. Думаю что это всё из-за того, что у нвидии нет особой мотивации совершенствовать компилятор openCL, а вот куду они хотят вылизать до максимума, чтобы там не преобразовывалось в каждой нити 1 в 1.0 без какого-либо смысла и цели. А вычислительному шейдеру glsl просто повезло, видимо. Могу демку откопать, запустишь и заценишь сам.

4,6 - со стороны кода решил на всякий случай (внутри оператора присваивания проверку на -1 добавил), чтобы не натыкаться каждый раз при отладке шейдера - и юниформы тоже у себя кеширую, вряд ли драйвер сильно быстрее может это у себя сделать, даже если он этим занимается.
>А зачем вообще его вызывать каждый кадр?
Незачем. После компиляции стоило бы сохранить номера и использовать только их. Ради удобства написания хочется использовать символьные имена переменных - и оператор обращения по индексу неплохо подходит. То есть на каждый шейдер не создаётся свой класс и не загромождает код.
Можно через шаблоны в компайл-тайме сделать, чтобы constexpr-функция во всех местах подменяла строку-идентификатор на номер в массиве - поэтому я пока забью и буду гонять строку в рантайме, а потом переделаю если все более актуальные проблемы буду решены. Всё-равно это нужно только ради эстетической красоты что мол код не делает ничего лишнего, хеш одной строки посчитать это меньше микросекунды наверное. Разница как между 60 и 59.996
Хотя впрочем если бы там было land_shader.sun={..} - то это тоже более чем норм, но не хочется держать отдельный файл со списком юниформов для каждого шейдера, где нужно будет вручную вносить изменения после любого изменений состава юниформов. И ещё во всех местах придётся поменять тип шейдера с общего на специальный с нужным набором юниформов. Может быть на какой-то итоговой версии так сделаю, но на время разработки - нет, спасибо.
Аноним 18/02/21 Чтв 16:40:52 728433 121
>>728430
Картинки отвалились?
Аноним 18/02/21 Чтв 18:27:44 728454 122
>>728430
Еще по поводу location для юниформов: если у тебя целевая платформа поддерживает OpenGL 4.3 или выше, или может быть чуть ниже, но содержит GL_ARB_explicit_uniform_location, то можно забить на glGetUniformLocation и использовать код типа layout(location = 1) uniform vec4 yobaColor;
Аноним 18/02/21 Чтв 19:18:37 728470 123
>>728454
Благодарю, не знал. Прям от души благодарю, это решает многие неудобства, прямо сейчас перепишу всё.

Ещё в версии 2.1 не понимал зачем самплеру в шейдер необходимо передавать номер текстурного юнита, если это известно на стадии компиляции и там почти всегда 0/1/2, которые можно было бы константой в шейдере прописать. И очень обрадовался, когда это появилось в четвёртых версиях.

А про dsa вообще молчу - искренне не понимаю почему opengl с первых версий не сделан в куда более интуитивном dsa-стиле. По идее это же исключительно программная приблуда, которую можно полностью реализовать на программном уровне (что я собственно и делал поверх opengl в своих структурах) хоть в версии 1.1, верно? Точно не интересовался устройством opengl, но всегда казалось что глобальное состояние в opengl - это концепция только самого opengl, и железо об этом ничего не знает. Со стороны разрабов так вдвойне просто сделать возможность вместо смены глобального состояния и обращению к глобальному номеру текстуры связанным с GL_TEXTURE_2D добавить возможность обращаться просто по номеру текстуры.
Почему же тогда оно только в 4.5 появилась как часть стандарта?

4.3 вышло в 2012 году и поддерживается ещё более ранними карточками с драйверами помоложе. По ощущениям как будто ещё только вчера про геометрические шейдеры никто не слышал, а на половине компьютеров только ARB_vertex_program было. Так радовался, когда первую демку с фейерверком и отражениями сделал через асм-подобные шейдеры.

>>728433
Просто исчезают почему-то. Пробую ещё раз.
Аноним 05/03/21 Птн 10:39:42 731288 124
>>728629
Послушай совета мудрого, SDL уже есть, и не ищи ничего больше, ты уже пришел куда надо, максимум - imgui еще прикрутишь, если надо поверх графики интерфейс рисовать, и все. Да, поебаться придется, но только один раз, пока сделаешь из этого что-то типа шаблонного проекта со всеми настройками для сборки. Собственно SDL не надо компилить - инклюдишь и потом поставляешь со сборкой его библиотеку (а если под никсы, то там библиотека уже обязана быть в системе), а с imgui можно работать как с header-only.

Кстати, как компилишь под виндой? Cygwin/MSYS или MSVC?
Аноним 06/03/21 Суб 03:51:12 731520 125
>>728454
>layout(location = 1) uniform vec4 yobaColor
А это норм, что после этого перестаёт работать glGetUniformLocation, и всегда возвращает -1?
То есть если я указал номер явно, то по имени больше никак нельзя?
Аноним 06/03/21 Суб 04:06:33 731522 126
>>731520
А, забейте, у меня в начале шейдера слишком малая версия и включить явно расширение в шейдере я тоже забыл.
В итоге glGetUniformLocation перестаёт работать, но по номеру 2 юниформ записывает нормально, лол. Если поставить 430 или включить, то всё работает.
Аноним 06/03/21 Суб 06:54:14 731530 127
изображение.png 22Кб, 641x305
641x305
изображение.png 14Кб, 617x208
617x208
>>728347
>Пруфов не будет, где-то читал, что тривиальные части состояния (т.е. не буферы, и не то, что вычисляется только на видеокарте) современный драйвер хранит у себя и возвращает не запрашивая устройство
Потестил. Столбцы 1/2/3 - обращение через GetUniformLocation/обращение по номеру через layout/и взятия номера из обычной std::unordered_map<std::string,int>. Справа то же самое в цикле на 1000 повторов. Время в мс показано.
На второй картинке std::map, который при одном значении в таблице выигрывает.

В общем скорее всего если не упарываться constexp, то специально обученный код без всяких std::string для только максимального быстрого извлечения чисел из таблицы обгонит GetUniformLocation, но в остальном можно забить и юзать GetUniformLocation хоть в каждом кадре, если по какой-то причине впадлу прописать все числа на стадии компиляции.
Ну и 35 мкс для вызова 1000 GetUniformLocation+glUniform4f это энивей смешно. Разница как между 60.00 и 59.87 фпс. Для неадекватных 1000 вызовов.
Аноним 07/03/21 Вск 05:22:56 731635 128
>>731530
Не согласен.

Я кешировал значение glGetUniformLocation - и получал довольно ощутимый прирост производительности (около 10%).
Аноним 07/03/21 Вск 06:20:49 731640 129
>>731635
В какой структуре?
std::unordered_map отстаёт в три раза от glGetUniformLocation, std::map в полтора раза - ты в самом деле ради этой хуиты что-то ещё писал?
Имеется ввиду ситуация, когда ты каждый кадр получаешь идентификатор из строки.
Аноним 07/03/21 Вск 07:52:40 731641 130
>>731640
>В какой структуре?
Я в int хранил
Типа такого:
при сборке шейдера
unsigned locPos = 0;
locPos = glGetUniformLocation(m_programId, "position");
И в мейнлупе:
glUniform4f(locPos , value.x, value.y, value.z, value.w);
Плюс сделал тест с 100к DIP (чтобы фпс было ниже 30 на моем железе) и сравнивал.

И кстати:

>Для неадекватных 1000 вызовов.
Не совсем неадекватно. Скорее реально. Как минимум каждому мешу нужно передавать матрицу трансформации каждый кадр. Видимых уникальных мешей может быть больше 1к. А к этому надо еще добавить дополнительные проходы рендера - deffered, тени, отражения и т.д. Там и до 10к может дойти
И это при условии что есть uniform constant и можно передавать множество переменных одним вызовом
Аноним 07/03/21 Вск 08:10:39 731644 131
>>731641
Ещё раз повторю, что имеется ввиду ситуация, когда ты каждый кадр получаешь идентификатор из строки.
А не когда ты тупо int хранишь.
>при сборке шейдера
Это вторая колонка в моей таблице, когда я вызываю только glUniform по номеру заданному через layout.

Речь о том, насколько быстра glGetUniformLocation если использовать её каждый кадр. Про производительность glUniform речи не шло.
>Не совсем неадекватно. Скорее реально.
Матрица - это один юниформ. Ты вызовешь для неё один glGetUniformLocation, а не 1000.

Кажется ты не читал, но там выше же было обсуждение, что по хорошему нужно вызвать glGetUniformLocation только один раз при загрузке шейдера - но суть была в том, что а если вдруг не сохранять идентификатор униформа, то достаточно ли оптимизирована glGetUniformLocation?
И да, более чем достаточна, и вызов glGetUniformLocation+glUniform всего в три раза отстаёт от glUniform, и занимает меньше микросекунды.
Аноним 08/03/21 Пнд 14:18:34 731824 132
Сап, как начать вкатываться в огл? Хочу замутить одну штучку на lwjgl
Где брать экзамплы и как рендерить кубики/пирамидки/призмы/другие примитивы?
Аноним 09/03/21 Втр 16:08:40 732061 133
>>731644
>идентификатор из строки
А?
Аноним 10/03/21 Срд 06:58:15 732128 134
>>731824
Learnopengl.com в оригинале или перевод на Хабре, гуглится
Аноним 11/03/21 Чтв 11:58:01 732368 135
А может быть такое, что расширение в списке есть, но по факту не поддерживается или поддерживается не полностью?

Я отослал демку на тест знакомому, а она не работает - хотя я ничего редкого не использовал.
Дописал проверку расширений и версий - всё на месте. Выяснилась что проблема в простейшем геометрическом шейдере, который у меня даже на интеле работает. Какая-то неудачная версия драйвера с багом или почему такое может быть?
Аноним 11/03/21 Чтв 18:07:00 732475 136
>>732368
Да, драйвера с багами в принципе бывают, периодически натыкаюсь на сообщения типа "обновил драйвер на свежую версию и все заработало", еще бывают сообщения о регрессе, т.е. "поставил прошлогоднюю версию - работает, ставлю свежую - не работает", но это намного реже.
Аноним 11/03/21 Чтв 22:00:24 732524 137
>>678945 (OP)
Ребят, мне лень писать на форумы, поэтому спрошу здесь. Сразу оговорюсь, у меня ноуст с линуксом и nvidia пашет только через optirun -b virtualgl. Так вот, почему в играх у меня fps проседает на 15 по сравнению с cpu, хотя по идеи так не должно быть, но при этом на отдельных шейдерах, например на шейдере моря, явно заметно, что nvidia даёт нехилый буст к перфомансу - картинка идеально плавная.

Есть ещё один прикол. У меня при загрузке этого шейдера сразу кулер начинает работать во всю мощь (и это хороший признак, значит видюха работает), а в игре кулера не слышно. Может такое быть, что разраб прост софтварно какие-то ограничения поставил и не даёт моей видеокарте разогнаться на полную мощь, или у меня драйвер/бридж/(хуй пойми чё ещё) не так работает?
Аноним 12/03/21 Птн 08:18:15 732632 138
>>732524
Что значит "при загрузке этого шейдера? Шейдер разве не за милисекунду загружается?
>а в игре кулера не слышно
На видеокарте есть разные блоки, и шейдер может упираться в какой-то не самый энергозатратный. Или например если у тебя узкое место - пересылка данных между карточкой и процессором, то возможно карточка будет довольно холодной (или наоборот, я без понятия - вдруг это самая горячая операция), потому что почти ничего не считает, а просто данные пересылает-принимает.
В общем не так уж невозможно написать шейдер, который будет выдавать 10 фпс и почти не прогревать карточку.

>Может такое быть, что разраб прост софтварно какие-то ограничения поставил
Нет, это шиза. Это не ограничения, а просто хуёвый код, скорее.
Аноним 12/03/21 Птн 09:18:17 732638 139
>>732632
>при загрузке
Ну при работе имею ввиду. Но к слову об этой могу сказать, что когда я сидел на debian'е, тот же optirun давал небольшой прирост в фпс, ну или как минимум уж точно не ухудшал производительность. За всю подноготную не шарю этих графических api не шарю, но насколько я вычитал virtualgl работает не напрямую, а ориентирован как клиент-серверное приложение, мб это даёт свой оверхед. Хотя может ты за линуск и не шаришь, конечно, чё я тебя гружу
Аноним 12/03/21 Птн 18:56:01 732741 140
Аноним 14/03/21 Вск 16:46:11 733176 141
Ананасы, есть два вершинных буфера: 1 для вершин и их цвета (чанки карты), 2 для текстурных координат (у всех чанков одинаковые).
Как бы сделать так чтобы буфер для текстурных координат использовался для рисования всех чанков, а то выходит что один рисуется нормально, а остальные нет.
Аноним 14/03/21 Вск 17:54:29 733189 142
изображение.png 19Кб, 1532x459
1532x459
>>733176
Показывай код.
https://pastebin.com/caw3xBVv
У меня всё работает как по маслу, буфер цветов отлично работает на других координатах. Просто замени glColorPointer на glTexCoordPointer или, вернее, на glVertexAttribPointer.

glEnableClientState не нужен в новых версиях что ли? Я его прописал думая, что он нужен из-за легаси - а у меня программа перестала вообще хоть что-то показывать после disable, как будто он изначально был включён для всех пунктов.
Аноним 14/03/21 Вск 17:57:49 733190 143
>>733189
> У меня всё работает как по маслу
Потому что у тебя количество вершин в буферах одинаковое.
Аноним 14/03/21 Вск 18:02:12 733192 144
>>733190
А не должно быть? Как это вообще работать должно, если тебе не хватает текстурных координат?
Я и говорю код показывай.
Аноним 14/03/21 Вск 18:14:12 733196 145
>>733192
В первом буфере 145 вершин на каждый чанк т.е. 32на32 чанка это 21025 вершин
Во втором только 145 текстурных координат.

Соответственно из первого буфера и второго буфера считывается 145 вершин нормально, а дальше выходит хуйня.

Что тебе код-то даст? Ты же нихера в этом не понимаешь всё равно.
Аноним 14/03/21 Вск 18:30:45 733201 146
Анон, помоги понять суть VBO. Насколько я понимаю на данный момент, VBO собой представляет некий массив с какими угодно данными о вершинах. Пока, насколько я понял, пайплайн с его участием происходит так:
1) Создаётся в OpenGL context некий абстрактный буфер общего назначения
2) Этот буфер общего назначения привязывается к GL_ARRAY_BUFFER, чтоб второй ссылался на первый
3) GL_ARRAY_BUFFER (его бэкер) функцией glBufferData заполняются данными и высылаются в реальный VBO в видеопамяти

Правильно ли я понимаю на данный момент, как это происходит?
Аноним 14/03/21 Вск 18:33:54 733202 147
>>733196
Я то понимаю как раз, может быть не в этом, но в логике работы opengl и что он может/не может.
>Что тебе код-то даст? Ты же нихера в этом не понимаешь всё равно.
Поучусь. Без подкола - почему бы не смотреть на чужой код и не черпать оттуда удачные идеи при любой возможности?

Забинди текстурные координаты в начале, и бинди заново вершины указывая смещение последним аргументом в glVertexAttribPointer, и вызывай glDrawArrays на каждый чанк.
Или можешь сделать ssbo с текстурными координатами, а в шейдере вручную их доставать для нужного индекса, который вроде бы через gl_VertexID поступен.
Аноним 14/03/21 Вск 20:15:30 733219 148
>>733201
VBO просто хранит данные и всё. Через glVertexAttribPointer ты указывает как эти данные интерпретировать.
Соответственно, создаёшь vertexarrayobject и биндишь его.
Создаёшь vbo на самом деле ты можешь создать его, залить в него данные когда угодно, биднишь, заливаешь данные.
Скажем, этот буфер хранит Vertex'ы некоего куба. Вершина состоит из vec3 позиция, vec2 координаты текстур, vec4 цвет.
glEnableVertexAttribArray( 0 ) // в шейдере это будет layout(location = 0) in vec3 inVertex;
glVertexAttribPointer( 0, sizeof( vec3 ), GL_FLOAT, GL_FALSE, sizeof( Vertex ), 0 );

glEnableVertexAttribArray( 1 ) // в шейдере это будет layout(location = 1) in vec2 inTexCoord;
glVertexAttribPointer( 1, sizeof( vec2 ), GL_FLOAT, GL_FALSE, sizeof( Vertex ), sizeof( vec3 ) );

glEnableVertexAttribArray( 2 ) // в шейдере это будет layout(location = 2) in vec4 inColor;
glVertexAttribPointer( 2, sizeof( vec4 ), GL_FLOAT, GL_FALSE, sizeof( Vertex ), sizeof( vec3 ) + sizeof( vec2 );


sizeof( Vertex ) это sizeof( vec3 ) + sizeof( vec2 ) + sizeof( vec4 )
Последний параметр в glVertexAttribPointer, это отступ в байтах от начала Vertex. Чтобы не ебаться с этим отсуптом, просто заранее пишешь в какие-то переменные отступ типа так:
https://pastebin.com/iQu2BDBX

Короче, говоря: VAO нужен чтобы запомнить какие атрибуты ты включил или отключил для какого буфера.
При биндинге VAO он сам биндит VBO и EBO (индексный буфер), устанавливает атрибуты и всё.
И тебе останется включить шейдер, забиндить текстуры и рисовать.

Аноним 15/03/21 Пнд 17:21:01 733371 149
>>733176
Этот чувак шарит >>733202. Либо у тебя в буфере данные уже подготовлены для последовательного подсоса без дополнительных телодвижений со стороны гпу, либо распиливай на несколько вызовов. Сэкономить на повторах данных и на вызовах отрисовки не выйдет.
Аноним 15/03/21 Пнд 19:16:59 733391 150
>>733219
Спасибо за разъяснение! Но есть один непонятный момент: вот этот "биндинг", который запоминает VAO. Никак в толк не возьму, что именно он запоминает. Насколько я понимаю, биндинг VBO - это просто создание пустого буфера и биндинг его на GL_ARRAY_BUFFER. Какой из этих шагов воспроизводит VAO?
Аноним 15/03/21 Пнд 19:29:27 733395 151
>>733391
> икак в толк не возьму, что именно он запоминает.
Какие VBO ты забиндил, какие атрибуты включены или включены, и что они означают.

> Насколько я понимаю, биндинг VBO - это просто создание пустого буфера и биндинг его на GL_ARRAY_BUFFER
VBO это vertex buffer object, да это GL_ARRAY_BUFFER.
Создаётся он функцией glGenBuffer. Биндинг это вызов glBindBuffer.

> Какой из этих шагов воспроизводит VAO?
Биндинг glBindBuffer

Ты один VBO можешь использовать хоть в 10 разных VAO.
Аноним 15/03/21 Пнд 19:46:08 733397 152
>>733395
>Какие VBO ты забиндил
Вот этот момент непонятен. Если есть один VBO - новый пустой буфер, забинденый на GL_ARRAY_BUFFER. Что там можно запомнить? Ведь данные мы заносим дальше через glBufferData, а на момент glBindBuffer в GL_ARRAY_BUFFER пусто.
Аноним 15/03/21 Пнд 20:00:32 733399 153
[/b]
Аноним 15/03/21 Пнд 20:02:43 733402 154
.png 36Кб, 590x799
590x799
>>733397
Биндинг это как бы его включение. Шейдеры будут читать данные из включённых буферов, если ты конечно правильно настроил аттрибуты (glEnableVertexAttribArray и glVertexAttribPointer)

> Что там можно запомнить?
Что ты включил конкретно вот этот вот буфер и что аттрибуты у него вот такие.
Данные тут не причём. Если же буфер пустой, то понятно что ничего не нарисуется.

Можешь считать что VAO это просто автоматизация действий: биндинг буфера, включение и установка атриубтов и всё.
Короче, вот тебе картинка с псевдокодом.
Что обведено красным VAO запоминает и делает за тебя каждый раз.
Аноним 15/03/21 Пнд 20:17:14 733403 155
>>733402
То есть правильно ли я понял, что VAO за меня создаст пустой буфер, и его уже забиндит на GL_ARRAY_BUFFER?
Аноним 15/03/21 Пнд 20:19:13 733405 156
>>733403
Чувак, тебе опенгл рано ещё. Тебе надо букварь для начала.
Аноним 15/03/21 Пнд 20:22:10 733406 157
>>733405
Ну а где он возьмёт буфер, который забиндит функцией glBindBuffer? Я это пытаюсь понять.
Аноним 15/03/21 Пнд 22:01:55 733416 158
>>733406
Внутри драйвера оглы хранится полное внутреннее состояние, которое в тч включает в себя так называемые точки подключения/биндинги. Назначение этим биндингам тех или иных буферов можно представить как простое присваивание 'указателя' на буфер. Vao в этом случае собственно и сохраняет часть внутреннего состояния, в частности и значения 'указателей' на подключённые буфера. В этом его основная польза - вся настроечная инфа относительно того, какие буферы к каким биндингам подключены и в каком формате из них нужно читать, содержится в одной сущности, которую активировать проще, чем всё по отдельности.
Аноним 16/03/21 Втр 01:47:34 733429 159
16142125792940.jpg 88Кб, 1072x1080
1072x1080
Здравствуйте, господа математики.
Я к вам с вопросом. До этого никогда не писал на низкоуровневых библиотеках, Я C# разработчик. Извините, если вопрос не совсем по адресу.
Я ищу решение следующей проблемы. Опишу подробнее.
У меня есть плата raspberry Pi с установленным линуксом, ещё основная проблема это Arm64.
И мне нужно написать небольшую прогу, которая
1. пару раз в минуту обращается наружу хттп гет запросами, откуда получает json, парсит, и получает необходимые обьекты. И из них В общем, строки для последующей работы.
2. Полученные строки необходимо плавно(линейная интерполяция) рисовать и двигать по экрану, тем самым создавая такой красивый заанимированный графический интерфейсинтерфейс бегущих строк
Размер окна, в котором это нужно рисовать маленький(200х300).

Я до этого поста пробовал сделать на wpF+avalonia(кроссплатформенный wpF), оно работает, но бывают частые лаги. Я замерил интервалы отрисовки, когда вызывался Invalid окна, 90% кадров рисовались отлично с задержкой 15-16миллисекунд, а 10% кадров с задержкой 30 миллисекунд. В результате этих лагов выглядит криво. Как я гуглил, у многих такая же проблема, и разрабы avalonia пока не исправляют.

Мне посоветовали посмотреть в сторону SDL2, и я нашел нугет пакет для .Net core, но опыта в нём, соответственно, ноль. Опыта работы с линуксом околонуля.

Я бы написал все прекрасно на юнити и не парился по всему этому поводу, но в юнити нельзя собрать для линукс arm64.

Собственно тут я вижу два стула.
1. Подскажите, пожалуйста, какими средствами это лучше и быстрее сделать.
2. Если у кого-то есть опыт в этом деле и время быстро с этим помочь(именно линукс и именно arm64), то может договоримся за оплату.
Аноним 16/03/21 Втр 12:39:00 733488 160
1615887539866.jpg 34Кб, 401x300
401x300
>>733429
> 1. пару раз в минуту обращается наружу хттп гет запросами, откуда получает json, парсит, и получает необходимые обьекты. И из них В общем, строки для последующей работы.
> 2. Полученные строки необходимо плавно(линейная интерполяция) рисовать и двигать по экрану, тем самым создавая такой красивый заанимированный графический интерфейсинтерфейс бегущих строк
> Размер окна, в котором это нужно рисовать маленький(200х300).
> Если у кого-то есть опыт в этом деле и время быстро с этим помочь
Выглядит как легкая задачка для Lazarus Free Pascal (это намёк на гуглинг, да)
Аноним 16/03/21 Втр 17:40:59 733545 161
>>733416
То есть, прямо сохраняется id буфера, который привязан к GL_ARRAY_BUFFER?
Аноним 16/03/21 Втр 18:16:52 733552 162
>>733545
И GL_ELEMENT_ARRAY_BUFFER тоже, и не только.
Аноним 17/03/21 Срд 07:59:40 733621 163
>>733552
Спасибо, теперь понятнее. То есть я вызываю VAO, рисую с использованием его буфера и атрибутов, после рисования буфер очищается, через некоторое время я снова вызываю VAO и снова рисую в том же самом буфере и с теми же атрибутами.
Аноним 17/03/21 Срд 11:34:52 733632 164
>>733621
У тебя в одном предложении три раза используется слово буфер, не знаю точно что ты имел в виду, так как это многозначное понятие в рамках OpenGL, его надо уточнять: буфер вершин, элементов, юниформов, кадра, и т.д.

Схема примерно такая должна быть:
1) сгенерировать VAO и подключить его, сгенерировать VBO и опционально буфер элементов, если ты используешь индексы вершин, и подключить их.
2) если у тебя статическая геометрия, то заполни VBO сейчас, либо же только задай его размер, а вместо данных будет нулевой указатель, и не забудь сразу задать указатели на атрибуты вершин (glVertexAttribPointer, glEnableVertexAttribArray).
3) далее можешь отключить только VAO (glBindVertexArray(0)) и делать все остальное.

Затем в каждом кадре:
1) подключаешь только VAO;
2) если геометрия динамическая, то заливаешь ее в текущий VBO (который уже подключен через VAO) - glBufferData, glBufferSubData (считается быстрее всего, если обновляешь небольшую часть буфера вершин), glMapBuffer (будет слоупочно), если статическая, то ничего не делаешь - она уже в буфере вершин;
3) подключаешь шейдерную программу, заполняешь юниформы;
4) рисуешь - glDraw-чего-то-там в зависимости от того, как именно рисуешь.

Если ты имел в виду еще где-то GL_FRAMEBUFFER, то это отдельная тема.
Аноним 17/03/21 Срд 14:37:21 733668 165
>>733488
Открыл в гугле.
Там пизданешься с ума раньше, чем на винде соберешь в этом лазарусе для линукса арм64.
Аноним 17/03/21 Срд 14:52:05 733672 166
>>733668
Таки да. Программирование - непростая штука. И программистам не просто так 300КК/нсек плотют. Хоть паскаль, хоть си/плюсы, хоть лисп, хоть фортран, если ты не шаришь - ты соснёшь.

Копи деньги на оплату специалиста.
Аноним 17/03/21 Срд 15:13:24 733679 167
>>733668
У тебя там линукс крутится с иксами или без? По-разному можно сделать.
Аноним 17/03/21 Срд 19:03:37 733761 168
>>733429
И всего-то?
Библиотека curl, cjson, stb_truetype (можно и freetype2), рисовать самым простым опенглом, а компилировать прямо на малинке.
У тебя же там иксы?
Незнаю, отчего могут быть лаги, но вряд ли это что-то нерешаемое.
Если готов оплатить, то могу сделать долларов за 40-80, кидай почту или телеграм.
Аноним 18/03/21 Чтв 07:45:52 733840 169
Как рендерить жидкости? Не плоские поверхности с волнами, а симуляции, чтоб она перетекала через всякие каналы и прочие отверстия
Аноним 18/03/21 Чтв 11:38:57 733860 170
>>733672
>300кк/нсек
Рыночек порешал прост, но по своей сути программисты - это обычные ремесленники, на ступень выше чёрнорабочих
Аноним 18/03/21 Чтв 11:41:52 733861 171
Аноним 18/03/21 Чтв 12:48:25 733867 172
>>733860
> по своей сути программисты - это обычные ремесленники
Повар тоже обычный ремесленник. Попробуй устройся в элитный ресторан шефом. Жду через неделю с пруфами.
Аноним 18/03/21 Чтв 15:25:57 733897 173
Аноним 18/03/21 Чтв 17:34:49 733919 174
>>733861
Я так понял это только для тех у кого карта от нвидии и кто может в куду, а есть симуляции для нищих? Мне фотореализм и абсолютная физическая достоверность не нужны. Если бы было что-то как в 2д симуляторах песка, только в полигонах - я был бы счастлив
Аноним 18/03/21 Чтв 18:10:17 733930 175
>>733919
Можешь попробовать загуглить "SPH fluid", там простой код - если частицы по равномерной сетке раскидать, то на современном процессоре можно 50-200к в 60 фпс получить.
По этому же запросу есть демки, где из частиц прям поверхность получают - но как это делается я не знаю.
Аноним 21/03/21 Вск 11:53:16 734363 176
>>678945 (OP)
Существует понятный гайд по установке glfw на линух?
Если нужно с исходников компилить то в какой директории? Сначала cmake или make? Где потом искать и подключать includ'ы?
Аноним 21/03/21 Вск 17:19:16 734442 177
>>734363
А там есть какие-то сложности? Сделай build каталог на уровне каталога с сырцами
cd build
cmake ../sources
make install
Возможно что-то подшаманить в конфигурации, выбрать install каталог.
Аноним 21/03/21 Вск 21:14:38 734508 178
>>734442
А какой путь потом к заголовочным файлам в редакторе указывать?
Аноним 22/03/21 Пнд 06:59:00 734556 179
>>734508
Если install_path оставишь системным, то никакой, достаточно того, как в примерах на сайте либо показано, т.е. <GLFW/glfw3.h>
Вообще на сайте либы есть компайл-гайды нормальные. Или ингришь совсем не осилишь?
Аноним 22/03/21 Пнд 12:18:37 734578 180
>>734363
Госпаде, я сейчас сижу на винде только потому что рабочий софт только на ней, и радуюсь, что в кои-то веки в винде MSYS работает почти искаропки (ы-ы-ы, pacman, без всяких сраных WSL, виндовые бинарники с легким привкусом линуха, ы-ы-ы), когда в линухах уже давно все было сделано как надо - поставил либу, если заголовки в отдельном пакете, то поставил и их, и просто все работает. А тут кто-то дрочит ручную сборку достаточно распространенной либы в линухах и спрашивает про пути. Маня, apt/yum/pacman/или-что-там-у-тебя сделал один раз и просто все работает, никаких путей не надо, не надо никаких cmake/make/zalupacake дрочить, codelite какой-нибудь навернул, сказал ему gcc найти на машине, зависимости из пакетного менеджера докинул, и ПРОСТО ВСЕ РАБОТАЕТ.
Аноним 22/03/21 Пнд 12:48:58 734592 181
>>734578
И будет твоя прога только через msys.dll работать и фризить, такие пердоли...
Аноним 22/03/21 Пнд 13:20:43 734596 182
ldd.png 47Кб, 604x482
604x482
>>734592
>msys.dll
Не угадал, пикрил.
Фризов пока не было.
Аноним 22/03/21 Пнд 22:23:17 734695 183
>>734596
а ты mingw шный компилятор использовал или msys ный?
Аноним 22/03/21 Пнд 22:47:10 734698 184
>>734695
>>734592
Очевидно он использовал mingw.
Msys компилятор нужно использовать только для разработки тулзов для самого msys.
Аноним 23/03/21 Втр 10:58:17 734747 185
>>734695
>>734698
Пакеты без mingw-префикса можно юзать только если нету с префиксом, иначе придется потрахаться.
Аноним 23/03/21 Втр 11:56:39 734750 186
>>734747
git только без префикса
Аноним 30/03/21 Втр 10:24:59 736035 187
Может ли кто-то прояснить про bindless-текстуры? Вот я читаю то, что записано в вики у кроноса:

>Before a handle can be used in a bindless operation, the data associated with it must be made resident.

>Note that a handle is what is being made resident, not a texture. As such, if you have handles that refer to the same texture's storage, making one resident is not sufficient to use one of the other handles. Residency affects more than just the image data.

>Conceptually, image data being resident means that it lives within GPU-accessible memory directly. The amount of storage available for resident images/textures may be less than the total storage for textures that is available. As such, you should attempt to minimize the time a texture spends being resident. Do not attempt to take steps like making textures resident/unresident every frame or something. But if you are finished using a texture for some time, make it unresident.

То есть получается, что я не могу просто взять и сделать все свои текстуры сразу доступными для bindless, и надо фактически каждый кадр еще вычислять, какие из них будут использоваться, а какие нет, иначе драйвер может в любой момент сказать "чота памяти маловато", так?
Аноним 30/03/21 Втр 15:17:24 736091 188
>>736035
Можешь, если они все в видеопамять влазят.
Если ты стримингом текстур не занимаешься, просто забей и все делай резидентными.
Аноним 30/03/21 Втр 18:58:59 736149 189
Аноним 10/04/21 Суб 12:23:55 738128 190
Только начал с этой хуйней разбираться, концептуально не понимаю.
Есть значит массив треугольников. Я его загоняю в VBO и они рисуются на своих координатах и все хорошо. Теперь я хочу двигать только один элемент из этого массива, и насколько я понял, менять координаты прямо в VBO - хуевая идея, надо как-то через вертексный шейдер и матрицу переноса в юниформу передавать. Но блядь как если у меня все треугольники одним дравколлом рисуются, и соответственно в шейдер я могу передать только одну матрицу, одинаковую для всех треугольников.
Аноним 10/04/21 Суб 13:28:20 738133 191
>>738128
В зависимости от ситуации
1) Каждый треугольник - отдельный vbo, передавай матрицу и двигай как надо
2) Записывай в vbo новые координаты, при изменении
Аноним 10/04/21 Суб 13:57:23 738139 192
>>738133
Да проблема в том, шо то што это хуйня.
1. Отдельные vbo - дохуя дравколлов.
2. Менять vbo - я хочу двигать объекты мышкой, получатеся буфер будет очень часто обновляться и тормозить карточку, не оптимально. И в интернетах пишут, что такие вещи надо матрицами делать.
Я нагуглили что-то про Instancing, но там либо ограниченное кол-во объектов, либо переносы тоже надо будет в буфер заносить и его менять
Это все варианты решения проблемы, тут же сверхразумы есть?
Аноним 10/04/21 Суб 14:23:05 738149 193
>>738139
Говоря про треугольник, ты же упрощаешь задачу.
По факту у меня могут быть разные 3д модели, с миллионами треугольников. Совершенно логично, что каждая модель это отдельный vao/vbo со своими матрицами, и чтоб передвинуть одну модель относительно другой нужно менять ей матрицу.
Или у тебя единая сложная (допустим 2д) геометрия из отдельных треугольников, меняющая свою форму и количество треугольников. Тут никуда не деться от перегенерации vao.
Если у тебя куча однотипных моделей, ну инстансинг вполне пойдет, но опять же для каждого перемещения модели, придется менять данные в буфере, может только частично через glBufferSubData. Если моделей дофига, сделаешь несколько drawcallов.

Прямо таки стремиться к единственному drawcallу, конечно можно, но без фанатизма.
Аноним 10/04/21 Суб 15:03:22 738151 194
>>738139
>я хочу двигать объекты мышкой, получается буфер будет очень часто обновляться и тормозить карточку, не оптимально
Какая-то дичь. Я не заметил заметной разницы между тем, чтобы рисовать из памяти, и тем, чтобы каждый кадр полностью обновлять все вершины в vbo. И при этом ты можешь рисовать несколько сотен тысяч вершин из оперативы, и любая карточка моложе десяти лет это скушает в реальном времени. А передавать можно только изменённые.
Вершины это почти последнее место, которое станет узким местом производительности.

>Это все варианты решения проблемы
Можешь для каждой вершины хранить индекс соответствующего объекта, а множество матриц преобразования хранить в ssbo (или ubo, но его я никогда не использовал - точно не обещаю что он подходит).
Один дравколл, при движении объекта меняется только одна матрица. Можно хоть каждый кадр полностью перезаливать в буфер все матрицы.


Просто по количеству объектов смотри. Если меньше тысячи разных vbo, то я бы их так и оставил - почему нет? Если больше и для каждого своя матрица, и при этом каждый объект состоит из малого числа редко обновляющихся вершин (которые привлекательно посчитать один раз поменяв vbo) - то уже замерял бы производительность, так ли медленны эти несколько тысяч вызовов и нужно ли их менять на glBufferSubData.
У меня во всех случаях производительность упирается в фрагментные шейдеры, который кушают 90% времени - а во всех остальных местах можно что угодно делать любым подходом, и это почти никак не влияет на производительность.
Аноним 10/04/21 Суб 15:06:54 738153 195
Аноним 10/04/21 Суб 15:17:38 738155 196
>>738151
Отдельные vbo (один vbo со множественными дравколлам) предпочтительнее, потому что ты их просто по пирамиде видимости можешь отсекать вовсе никаких вызовов не делая для невидимых объектов. Поэтому меня и не смутила бы даже тысяча разных vbo.
Просто необходимость объекты делить на чанки (кучи объектов расположенных примерно в одном месте) уже мотивирует использование разных vbo.
Если же у тебя есть одинаковые объекты расположенные в разных частях мира (стулья какие-нибудь, ящики, кусты) - тогда тебе в любом случае нужно использовать один vbo, и для разных кустов разные матрицы использовать. И да, несколько дравколлов. Сложно представить игру, где каждый стул уникальный и повторяющейся геометрии нет. Одинаковый стул из одного буфера всё ещё возможно нарисовать в разных местах одним дравколлом с использованием некоторых костылей - но они повредят как ясности кода (и возможности его изменения), так и производительности.

Можно конечно хоть вообще все данные хранить в одном буфере обновляя разные его части - но так ли тебе этот дрочь нужен ради 2% производительности? Лучше над игрой-геймплеем поработай или что ты там делаешь. Какая-то высокоуровневая оптимизация по типу отсечения по пирамиде видимости даст тебе на порядок больше, чем выбор между одним/множественными vbo и всеми другими подходами. Неверная точка приложения сил - если ты не просто учишься и экспериментируешь.
Аноним 10/04/21 Суб 16:07:36 738162 197
>>738155
Да я только начал учить, просто вообще непонятно что оптимально, что нет, какие бест практисес, в туториалах про время исполнения тех или иных вещей не пишут почти.
Аноним 10/04/21 Суб 20:14:54 738187 198
>>738151
Дум3 например каждый кадр пишет все вертексы-индесы в видеопамять заново. Но это не так много, где-то пара мегабайт. Сейчас конечно модели пожирнее, но и память и шины быстрее.
Аноним 10/04/21 Суб 20:29:13 738191 199
>>738187
Только там всего по паре буферов на вершины\индексы\юниформы. Пока один рендерится, в другой пишется.
Аноним 11/04/21 Вск 07:04:24 738241 200
Аноним 11/04/21 Вск 23:17:56 738344 201
>>738128
Не заморачивайся сильно, от того что ты будешь буфер обновлять каждый кадр ничего ужасного не произойдет. Скорее всего будет быстрее чем всякие сложные шейдеры с бранчами.
Аноним 14/04/21 Срд 11:03:00 738659 202
Двочаны помогите, я синтаксис glsl понять не могу.

Вот у меня есть
varying vec4 v_vColour;

У v_vColour есть r g b a - это цвет и а спрайта.
Мне нужно, чтобы в той точке, где альфа единица, альфа становилось равной 0

Но если я пишу
if v_vColour.a == 1.0 v_vColour.a = 0.0;
Мне пишет синтаксическую ошибку. А в чём ошибка? Как это в glsl делается?
Аноним 14/04/21 Срд 11:24:54 738660 203
Всё, нагуглил. Надо писать
if (v_vColour.a == 1.0) {v_vColour.a = 0.0;}
Аноним 14/04/21 Срд 14:40:31 738683 204
1.png 0Кб, 112x94
112x94
Теперь я могу вырезать контур игрока на спрайте света, если источник света находится позади него.
Но теперь я хочу уменьшить этот контур на 2 пикселя, сделав тем самым освещение спрайта игрока "по краям", добавив таким образом имитацию 3д света в 2д.
Аноним 15/04/21 Чтв 10:41:45 738777 205
изображение.png 3Кб, 281x101
281x101
>>738660
Фигурные скобки не обязательны. Обязательны круглые скобки вокруг условия, и (если что) это не только glsl, но и обычный си.
Аноним 15/04/21 Чтв 10:43:41 738778 206
Текс, разобрался в синтаксисе и даже понял как работать с координатами текстур.
Для того, чтобы не просто вырезать спрайт игрока, мне нужно не просто уводить в 0 альфу и цвет точек, у которых альфа равна 1.

Мне нужно проверять окружающие точки, и если справа-слева сверху-снизу у точки с альфой 1 альфа не 1, то вместо увода альфы в 0 копировать на себя одну из этих точек.

Получится много if.
Насколько я понял, в шейдере нужно избегать if

Есть какие-то методы? Типа умножения вектора на булин?
Аноним 15/04/21 Чтв 10:45:27 738779 207
>>738777
Спасибо.

if (right != 1.0 || left != 1.0 || up != 1.0 || down != 1.0)
{

}

Так тоже вроде работает. Все условия скопом в скобках. По крайней мере на синтаксис не ругается.
Аноним 15/04/21 Чтв 11:04:47 738783 208
изображение.png 11Кб, 668x181
668x181
Кстати, анончики, а есть какая-то ide для шейдеров?

Чтобы оно подсвечивало cross как встроенную функцию, а cross2sa подчёркивало красным - так как такой функции нет выше?

pycharm только типы по сути подствечивает, или простые ошибки как отсутствие скобок в if - но всё-равно можно допустить опечатку и искать её придётся вручную.
Аноним 15/04/21 Чтв 11:13:42 738786 209
>>738778
>Насколько я понял, в шейдере нужно избегать if
Считай, что у тебя во всех случаях вычисляются обе ветви if.
То есть если у тебя написан код по типу if (p<0.001) {оче медленная функция} else {быстрая функция} - то работать он будет со скоростью оче медленной функции, даже если p почти всегда больше 0.001
Я не знаю как делают нормальные люди, но я вместо очень медленной функции записывал маску пикселей, после чего запускал медленный шейдер только для нужных пикселей.
Было бы интересно услышать как другие с таким справлялись.

Вот картинку погляди: >>728269
Аноним 15/04/21 Чтв 11:28:45 738789 210
1.png 0Кб, 112x94
112x94
2.png 0Кб, 112x94
112x94
3.png 0Кб, 112x94
112x94
>>738786
В этом коде ты вместо того, чтобы вычислить размер текселя, испольшуешь шаг 0.0005 по иксу, что примерно соответствует размеру текселя на текстуре шириной 1920. Я уже сумел это понять

Но остальное я в твоём коде не понимаю.

Я собираюсь для каждой точки на сурфейсе, который рисуется шейдером проверять альфу.

У меня исходник пик 1. На нём свет с а<1.0 в каждой точке и силуэт игрока с a==1.0 в каждой точке.

В настоящий момент мой шейдер ifом проверяет равенство альфы единице, и если она равна, то обнуляет её, получая пик 2.

Теперь я хочу добавить спрайту игрока фейкового объёма, не делая всяких этих карт нормалей хотя может быть потом я их и сделаю, как знать, просто сделав две обводки его силуэта светом.

Здесь потребуется куча ifов
Аноним 15/04/21 Чтв 11:43:55 738791 211
1.png 101Кб, 826x847
826x847
Ну вот оно даже получилось с 5ю ifами.

На 4 пикселя в глубину спрайт игрока подсвечивается окружающим светом.

Выглядит классно, если спрайт игрока просто чёрный на самом деле зелёный контур.
Но когда я вставляю настоящий спрайт, получается коряво.
Потому что вот эту подсветку на глубину в 4 пикселя надо "размазать". Во-первых усреднить по ближайшим 4ём пикселям по цвету и альфе, а во вторых поступательно уменьшать по a по мере удаления от края спрайта.

А это ещё куча ifов.
Аноним 15/04/21 Чтв 12:57:14 738802 212
>>738789
>Я уже сумел это понять
Нет, это был просто фиктивный цикл, чтобы фпс упал до низких значений.

Я не очень понял что ты делаешь, но если у тебя 2д и разумное количество спрайтов, я бы без шейдера на процессоре один раз посчитал и загрузил.

>Ну вот оно даже получилось с 5ю ifами.
Нет бы код скинуть на пастебин какой-нибудь.
У тебя a принимает только два значения 0/1? Если да, то замени четыре нижних условия на:
texColor=texute2D(gm_BaseTexture,v_vTexcoord+4.0∙offsetx∙(-scan_rignt+scan_left)+4.0∙offsety∙(-scan_down+scan_up)) или что-то похожее.
Если нет, то всё-равно считай в четырёх условиях лишь текстурные координаты (которые v_vTexcoord+..), а потом один раз внизу вызывай texute2D с полученными координатами.

Условие на строке 20 можно переписать как texColor.a==1.0, ты же на 18 строке только что вызвал texute2D с теми же аргументами. Это настолько очевидно, что даже компилятор glsl сам может догадаться это оптимизировать.
Аноним 15/04/21 Чтв 14:10:53 738811 213
Runner 2021-04-[...].webm 1318Кб, 742x418, 00:00:06
742x418
Runner 2021-04-[...].webm 1478Кб, 556x314, 00:00:10
556x314
1.jpg 95Кб, 1322x857
1322x857
>Я не очень понял что ты делаешь,
webm рилейтед

>Нет бы код скинуть на пастебин какой-нибудь.
Ну тут хоть какая-то разметочка есть

>texColor=texute2D(gm_BaseTexture,v_vTexcoord+4.0∙offsetx∙(-scan_rignt+scan_left)+4.0∙offsety∙(-scan_down+scan_up)) или что-то похожее.
Сейчас подумаю, как можно ifы сократить.

Пока додумался до пикрил. В шейдерах я полный нуб.


>Условие на строке 20 можно переписать как texColor.a==1.0, ты же на 18 строке только что вызвал texute2D с теми же аргументами. Это настолько очевидно, что даже компилятор glsl сам может догадаться это оптимизировать.

Да это я пока проверяю, как работать будет. Потом всё почищу-причешу. как сумею



В итоге я беру значение альфы света на расстоянии alpha_depth пикселей от пикселя с альфой 1.0 и если там прозрачно, то я этому пикселю выставляю альфу в зависимости от того, сколько прозрачных пикселей рядом с ним.

Если рядом с непрозрачным пикселем на расстоянии alpha_depth нет прозрачных пикселецй, значит пиксель не освещён и альфу ему ставлю 0.

На вебмках на тестовом спрайте глубина 4, на спрайте игрока глубина 8. Т.к. с глубиной 4 света на игроке почти не видно.

Не откажусь от советов мудрых, как сделать лучше.
Аноним 15/04/21 Чтв 14:30:11 738817 214
>>738811
Сокращай не if, а сложность операций под if.

Вариант 1:
if (a==1.0)
color=texture2d(xy+16.0)
if (b!=1.0)
color=texture2d(xy-21.0)
--
Плохой вариант, два texture2d, две операции с xy

Вариант 2:
vec2 st;
if (a==1.0)
st=xy+16.0
if (b!=1.0)
st=xy-21.0
color=texture2d(st)
--
Лучше - две операции с xy, один texture2d

И на этом стоит остановиться.
Если у тебя а принимает только значения 1.0 и 0.0, то можно свернуть в одну строчку без условий (с использованием условного step, если у тебя float) - но это того не стоит, мне кажется. В финальной версии когда уже всё сделаешь, можешь напильником это обработать, чтобы 1% производительности получить (если он тут вообще будет) - но скорее всего будет несколько десятков более целесообразных задач в плане повышение производительности и общего качества программы.

Я бы ещё else расставил во всех местах, конечно. Ну так, на всякий случай - у тебя же значение texColor перезаписывается.
Меня люто триггерит твой код, где в случае если у тебя одновременно срабатывают alpha_up и alpha_left, результат будет такой же как просто с alpha_up, просто потому что он в коде расположен за alpha_left - при том что никаких выделенных направлений не должно быть.

Аноним 15/04/21 Чтв 15:20:15 738821 215
>>738817
>где в случае если у тебя одновременно срабатывают alpha_up и alpha_left, результат будет такой же как просто с alpha_up, просто потому что он в коде расположен за alpha_left

Да-да, я в курсе. Прямо сейчас работаю над этим.
По идее надо суммировать свет на пикселе со всех направлений и как-то нормализовать.
И вообще брать за основу света не значение альфы в N пикселей от освещаемой точки, а усреднённую альфу в регионе рядом с ней. Иначе структура света заползает на игрока. Свет-то от фанариков вручную рисуется. Там "нормали", все дела. Когда таким светом на игрока светишь, кажется что на него попадает изображение с проектора.
Аноним 15/04/21 Чтв 15:39:25 738827 216
>>738821
Написать как бы я сделал?
Я тоже то ещё нубло - но хотя бы чуть-чуть, немного, математик.
Аноним 15/04/21 Чтв 15:44:15 738829 217
>>738827
Напиши конечно.

Кстати, какой цвет и a будут у пикселя, взятого по координатам за пределами текстуры? Всё по нулям? Или нужно ставить условие в цикл, чтобы за пределы текстуры не влезал?

Сейчас у меня такого условия не стоит и вроде всё работает без проблем.
Аноним 15/04/21 Чтв 15:51:54 738833 218
>>738829
> какой цвет и a будут у пикселя, взятого по координатам за пределами текстуры?
Зависит от параметров сэмплирования, никаких условий не надо ставить, кури glTexParameteri, GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T.
Аноним 15/04/21 Чтв 15:57:47 738834 219
>>738786
>То есть если у тебя написан код по типу if (p<0.001) {оче медленная функция} else {быстрая функция} - то работать он будет со скоростью оче медленной функции, даже если p почти всегда больше 0.001

Текс, до меня только сейчас дошло, что если я буду запускать циклы внутри if, то исполняться они будут для каждого пикселя, а не только для неосвещённого.

Впрочем характерные размеры спрайта света у меня где-то 8080, с редкими исключениями до 200200.
Аноним 15/04/21 Чтв 16:18:12 738840 220
>>738829
Лады, попозже вечером скину.
Тебя версия 4.5 и легаси устроит, чтобы тысячи строк не писать для того чтобы квадрат из четырёх вершин вывести и сдвинуть?
Аноним 15/04/21 Чтв 16:22:07 738841 221
1.png 63Кб, 564x619
564x619
>>738840
Я гамаком пользуюсь. У них GLSL ES v2
Аноним 15/04/21 Чтв 17:46:49 738849 222
1.png 120Кб, 1515x731
1515x731
Runner 2021-04-[...].webm 4844Кб, 962x540, 00:00:26
962x540
Вот что вышло.
Результат мне нравится.
Аноним 16/04/21 Птн 18:58:31 739007 223
Аноним 17/04/21 Суб 15:12:26 739117 224
изображение.png 24Кб, 1034x300
1034x300
изображение.png 190Кб, 1505x954
1505x954
изображение.png 62Кб, 770x501
770x501
>>738841
>GLSL ES v2
Это что вообще? Это не под мобилки разве?
Я тогда не буду доводить до ума, потому что я кода из своих демок намешал, и у меня легаси пополам с dsa, и по идее ни то, ни другое в es не поддерживается.
Шейдер ниже. in/out - это varying, binding просто подписывает на каком текстурном юните какая текстура.

К тому же ниже скинули то же самое что пишу я - только качественнее.
Там вся сложность в том, как выбрать нормали. Если как на первой картинке - то объём не тот который хочется. А на второй слишком бублики вместо объёма - это не для всех изображений подойдёт. Я вот выбрал так, что вблизи объект освещается равномерно - а издалека только сбоку. Можно считать что источник света за объектами, и тогда нормали на границе нужно считать иначе, чтобы они освещались когда свет за объектом.

Но в любом случае стоит заранее один раз посчитать нормали, а в шейдере две текстуры юзать - шейдер очень лёгкий получается, без условий и множественных выборок из текстуры.
Аноним 17/04/21 Суб 18:13:43 739139 225
>>739117
Так прикол в том, что у меня нет нормалей. Я как представлю, что нужно будет нарисовать нормали к полутора тысячам спрайтов, так дурно становится.
Так что я сделал просто "дешёвое" освещение которое будет применяться к редким объектам, типа игрока или NPC, подсвечивая их с краёв, как будто в игре ААА 3д свет с нормалями.
Аноним 17/04/21 Суб 18:14:25 739140 226
>>739007
Да-да-да. Я даже себе spritelamp купил. Но это дохера работы, а у нас ещё демка даже не сделана.
Аноним 17/04/21 Суб 18:57:37 739157 227
>>739139
Так программно сгенерируй их. Это будет лучше, чем костыль в шейдере. И производительнее.
Да, не так красиво как вручную, но всё ещё ничего может быть.
Аноним 17/04/21 Суб 19:11:01 739160 228
>>739157
Ну кстати да. Просто программно сделать из спрайтов "тело вращения" и нафигачить нормали на такое тело.

Может быть я так и сделаю когда-нибудь.
Аноним 18/04/21 Вск 16:42:56 739249 229
Поясните за Array Texture. Это настоящий двумерный массив с текстурами, где каждый слой - текстура? Или эмуляция таким образом одной большой текстуры разбитой на тайлы?
Аноним 18/04/21 Вск 17:50:20 739250 230
>>739249
Это обычная трёхмерная текстура - но такая где слои по глубине не блендятся из-за фильтрации, и при создании мипмапов размерность по глубине не уменьшается.
Аноним 18/04/21 Вск 18:08:16 739252 231
>>739250
Окей, тогда еще нубский вопрос. Есть ли возможность закинуть в шейдер штук 200-300 текстур, что бы можно было передавать через инстансированные массивы id этой текстуры и рендерить за один проход тысячи однотипных объектов с разными текстурами?
Аноним 18/04/21 Вск 21:23:28 739275 232
>>739252
Закидываешь в UBO или SSBO список номеров слоев в текстуре-массиве и в фрагментном шейдере юзаешь. Как обратиться по номеру инстанса - встроенная переменная gl_InstanceID.
Аноним 19/04/21 Пнд 01:29:16 739295 233
>>739252
Если они одинакового размера.
Если разного - то посмотри что такое текстурный атлас (тоже можно, сколько хочешь текстур и какого хочешь разрешения), но немного сложнее в виде кода.
Аноним 25/04/21 Вск 09:34:25 739932 234
Назрел вопрос по геометрическому шейдеру. Можно как-то в нем прочитать данные из инстансированного массива? В вертексном шейдере можно читать из него провернув финт аля layout (location = 2) in mat4 запихнув в вершинные атрибуты, что помогает избежать ограничения размера юниформ массива, но как быть с геометрическим? Неужели только через юниформ-массив?
Аноним 25/04/21 Вск 14:33:49 739956 235
>>739932
Передавай из вершинного в геометрический твои данные, так же как обычно передаёшь из вершинного во фрагментный цвета и текстурные координаты, когда нет геометрического?
>ограничения размера юниформ массива
Да чем же тебе ssbo не нравится. Можешь хоть из текстуры читать твои матрицы - там же даже есть функции распаковки пикселей во float-ы, которые прям в самых первых версиях opengl добавили как раз для таких нужд.
Аноним 25/04/21 Вск 22:36:10 740010 236
1
Аноним 26/04/21 Пнд 11:46:10 740029 237
>>739956
SSBO может не нравиться если есть ограничения на версию API, и ограничения эти либо в голове (возможно преодолеть), либо в железе (тогда жопа).
Аноним 26/04/21 Пнд 16:16:54 740087 238
>>740029
>тогда жопа
А текстура чем плоха? Можно текстуру из флоатов сделать, такое ещё во времена фреймбуферов и opengl 2.1 появилось везде, а в 3.0 вошло в стандарт - 13 лет назад.
Если доступ к текстуре нормально работает во фрагментном шейдере, то на каждую вершину по четыре вызова texelFetch (для матрицы) можно себе позволить - если по какой-то причине что-то современнее не работает.
Может быть я чего-то не понимаю...
Аноним 26/04/21 Пнд 21:47:30 740151 239
>>740087
По-моему "прямое" чтение из памяти должно работать быстрее чем через текстурный юнит, но это надо проверять.
Аноним 05/05/21 Срд 22:31:39 741186 240
Посоны, у меня есть точки на экране. Пользователь может выделить мышкой область и нужно найти все точки, которые попали в эту область. Как такое делать?
Это платина, да?
Аноним 05/05/21 Срд 22:58:34 741194 241
>>741186
Делаешь двухмерный массив размером с экран, куда на экране пользователь кликнул - идешь по тем координатам в массив и смотришь что там лежит. А точки, ну если их не много можно и старым опенгл ввести. Или сделать текстуру на основе массива и уже ее вывести.
Аноним 05/05/21 Срд 23:24:44 741197 242
>>741194
> если их не много
Сотни тысяч. Каждая точка - это наблюдение. В минуту делают 5 наблюдений, а всего наблюдения ведутся 12 лет.

Мне кажется, ты описываешь двумерный случай. А у меня трехмерный. В таком случае придется не просто брать координаты выделенной области, а куб [x0, x1]x[y0,y1]x[-1,1], после чего куб умножать на обратные матрицы (смещения, поворота итд) и получать область в пространстве точек. И потом искать, какие точки принадлежат этой области. А это дико долгая процедура, потому я надеялся, есть какие-то более умные подходы.
Аноним 05/05/21 Срд 23:39:49 741202 243
>>741197
Инстансные массивы. А выделение мышки проверяй обходом всех элементов, те что попали в выделенную область по координатам - те наши.
Аноним 06/05/21 Чтв 00:09:37 741207 244
>>741197
>выделить мышкой область
Квадратом, или произвольной линией?
>А у меня трехмерный
Пересчитываешь все точки в 2d-координаты, и делаешь проверки x1<x<x2 для квадрата, или более сложные по линии. Если у тебя точки за спиной, учти что ещё нужно будет проверить, что глубина положительна и точка перед камерой. Обратные матрицы не нужны.
К opengl твоя задача никакого отношения не имеет.
Можно построить пирамиду видимости и смотреть пересечения с границами в трёхмерном случае (разбирается в https://pmg.org.ru/nehe/nehex2.htm) - но для точек это смысла не имеет и намного производительнее будет просто точки пересчитать, мне кажется.

Если по какой-то причине тебе нужно лютая производительность, а форма выделения произвольная - то разделяй точки на чанки по сетке (или по дереву - но это очень сложная форма выделения должна быть из тысяч сегментов, что проверка каждой точки отдельно будет тяжелее, чем построение дерева) и проверяй сначала грубо попадает ли чанк в область, а потом просчитывай отдельно точки, которые находится в чанках, которые пересекаются границей выделения.
Аноним 06/05/21 Чтв 00:10:31 741209 245
Аноним 06/05/21 Чтв 00:34:29 741216 246
>>741207
>Пересчитываешь все точки в 2d-координаты
Но ведь 2д-координаты будут зависеть от матриц (картинка не статична, ее можно вертеть и приближать-удалять).
Пока сделаю так. Всю математику из вершинного шейдера перепишу на куду, чтобы можно было получать обратно 2д-координаты точек. И для выделенной области буду проверять эти 2д-координаты.
Спасибо.
Решил научиться в визуализацию, чувствую себя героем вебмки "Не лезь, она тебя сожрет"
Аноним 06/05/21 Чтв 00:34:51 741218 247
Аноним 06/05/21 Чтв 11:37:23 741297 248
>>741216
>Но ведь 2д-координаты будут зависеть от матриц (картинка не статична, ее можно вертеть и приближать-удалять)
Ии? Ты выделяешь точки в один определённый кадр, в момент выделения сохраняешь список выделенных точек. Или ты одновременно двигаешь камеру и изменяешь квадрат выделения? Энивей что бы ты не имел виду обратное преобразование тоже не статично, и пирамиду придётся перестраивать.

Если квадратом - то без разницы, при пересчёте ты выполняешь 4 скалярных произведения (умножение матрицы на вектор), при отсечении по пирамиде четырьмя плоскостями тоже 4 скалярных произведения (по одному на плоскость).
Это при выделении сложной фигурой на 2d экране, многоугольником или кругом нужно пересчитывать.

>Всю математику из вершинного шейдера перепишу на куду
Зачем? Есть вычислительный шейдер, который куда меньшими усилиями соединяется с программой на opengl, чем куда. Есть transform feedback, лол.
Ты уверен, что гонять 100к вершин каждый кадр будет быстрее, чем умножить их на процессоре (если не использовать transform feedback и считать их ещё раз)? Я не уверен. Скалярное произведение состоит только из сложений и умножений - это очень лёгкие операции на один такт.
Если ты поехавший, для тебя есть https://software.intel.com/sites/landingpage/IntrinsicsGuide/#techs=AVX2,FMA&text=mad&expand=2541,2553 - с помощью чего ты можешь ускорить вычисления в 4/8 раз, а на деле ещё сильнее за счёт совмещения умножения и сложения. А потом ещё распараллелить. Я не поверю что доступ к памяти видеокарты будет быстрее, чем самая быстрая процессорная операция.

Кстати, привет, мы знакомы с очень большой вероятностью по всем признакам.
Аноним 12/05/21 Срд 11:50:19 742576 249
изображение.png 7Кб, 514x544
514x544
Почему не работает обводка в задней части кубика?
Аноним 12/05/21 Срд 12:16:49 742577 250
>>742576
потмоу, что "кубик" не отрисовывается до конца?
Аноним 14/05/21 Птн 22:25:57 743256 251
изображение.png 5Кб, 368x351
368x351
9, -668.74933, -2802.08325, 95.99379, 0.05512, -0.07874, 0.99213,
0, -666.66602, -2800.00, 96.02305, 0.03937, -0.07087, 0.99213,
17, -670.8327, -2800.00, 96.21115, 0.01575, -0.04724, 0.99213,

9, -668.74933, -2802.08325, 95.99379, 0.05512, -0.07874, 0.99213,
1, -666.66602, -2804.16675, 95.60873, 0.05512, -0.09449, 0.99213,
0, -666.66602, -2800.00, 96.02305, 0.03937, -0.07087, 0.99213,

9, -668.74933, -2802.08325, 95.99379, 0.05512, -0.07874, 0.99213,
18, -670.8327, -2804.16675, 95.92864, 0.03937, -0.07874, 0.99213,
1, -666.66602, -2804.16675, 95.60873, 0.05512, -0.09449, 0.99213,

9, -668.74933, -2802.08325, 95.99379, 0.05512, -0.07874, 0.99213,
17, -670.8327, -2800.00, 96.21115, 0.01575, -0.04724, 0.99213,
18, -670.8327, -2804.16675, 95.92864, 0.03937, -0.07874, 0.99213,



Как посчитать эти ебучии нормали? Чтобы результат был как в последней колонке.
Аноним 15/05/21 Суб 13:21:58 743311 252
>>743256
Понятнее спрашивай, где у тебя координаты, где нормали и что это вообще (откуда ты это взял).

У треугольника одна нормаль, а не три разных в каждой вершине. Если у тебя в разных углах треугольника разные нормали - то это не нормали, а какие-то абстрактные числа одну тебе известным способом полученные.
Если считать нормаль в вершине как среднюю нормаль полигонов, в которые входит вершина, то на 9 точке получается 0.06058027 -0.0831159 0.99469683, а не то что у тебя - то есть там более сложный алгоритм сглаживания нормалей (например они зависят от других полигонов).
Аноним 15/05/21 Суб 20:18:11 743368 253
>>743311
> Понятнее спрашивай, где у тебя координаты, где нормали
Ты ёбнутый? Ты не знаешь что нормали обычно нормализованы?
Аноним 08/06/21 Втр 13:02:13 747199 254
>>747145
Например два треугольника с полупрозрачной текстурой как часть модели юнита.
Аноним 08/06/21 Втр 23:40:36 747386 255
Вопрос не по опенжл, а вообщем.

Как организовать рендеринг текста, особенно много текста, особенно динамически изменяющегося.

Какую геометрию выбрать, квады, или что то сложнее? какой формат вертекса наиболее подходящий: (позиция, uv, color)?

Чем рисовать: инстансингом мешей?

Немного хаотично, но думаю вы поняли. А то в интернетах чет нихуя не нашел бест практисес для отрисовки текста.
Аноним 09/06/21 Срд 01:51:46 747407 256
>>747386
В качестве экскремента делал рендеринг sdf single distance field шрифтов. Прикольно, конечно, можно за один вызов рисования тени нарисовать, но надо текстуру готовить, атлас. Если хочешь иметь разный размер шрифта, то возможно понадобится несколько текстур.
Посмотри freetype, правда не пробовал эту либу и подобные.
Если надо просто какой-то текст для дебага, то достаточно сделать атлас со шрифтом и всё.

Рисуй прямо так: glDrawElements( GL_TRIANGLE, 6 умножить на кол-во символов, GL_UNSIGNED_SHORT, nullptr, 0 )
Где символ состоит из 2ух треугольников { 0, 1, 2, 0, 2, 3 }
Вертекст у меня был такой vec4 (2 позиция, 2 текстурные координаты), vec4 цвет
Аноним 09/06/21 Срд 11:21:16 747439 257
Аноним 09/06/21 Срд 13:41:42 747465 258
>>747397
>>747407
>>747439

Спасибо буду смотреть.

Про сдф я в курсе, но сдф это скорее алгоритм уже для шейдеров, интересует больше так сказать хайлевельная организация рендеринга со стороны цпу.

Да кернинг самая главная залупа, потому что очень легко приводит к комбинаторному взрыву варинатов.
Аноним 19/06/21 Суб 20:36:22 749550 259
Ну что же вы, полигональные, расскажите чо хоть интересного сделали в последнее время?
Я вот - ничерта, тк всё время сжирает основная работа, вращать кубы некогда, читать Real-time Rendering 4th ed тоже. Тоска.
Аноним 19/06/21 Суб 20:47:30 749555 260
Аноним 20/06/21 Вск 20:28:57 749747 261
>>749553
Но зачем? Что за экзотика?

>>749555
Телеком. Сип-телефония и смежное. Много легаси и обусловленности понаписанными внутренними библиотеками и протоколами. Всё в бекэнде, визуализацией даже близко не пахнет.
Аноним 20/06/21 Вск 22:00:37 749760 262
Как можно описать портрет типичного опенгл-щика? Как вы начали заниматься кодированием графики? Что побуждает вас продолжать этим заниматься? Насколько вы задротны по технологиям и математике? Насколько вы дисциплинированы, чтобы курить кучу инфы, или вами движет естественная мотивация?

Давно хочется изучить программирование графона, начинал даже опенглтуториал, дошел до рисования нескольких разноцветных треугольников. Один раз даже было дело кодил рейтрейсер и оптимизировал его бинарным деревом (хотя там совсем не реалтайм был, и выводилось все в бмп файл).
Математику в общем-то знаю, геометрию люблю, кодить могу, в архитектуре цпу/гпу немного кумекаю. Только вот собраться и укуриться опенглом, шейдерами и прочим никак не получается.

Наверное потому что у меня нет какой-то конкретной цели, нет хотения писать свой 3д движок с невъебенными эффектами и быстродействием, и все в таком духе.
Скорее всего я чем-то не тем занимаюсь, и опенгл мне никакой не нужен, это просто красивая идея, что круто было бы разбираться в такой технологии...
Аноним 20/06/21 Вск 22:10:34 749763 263
>>749747
А опенгл тебе зачем, для души визуализировать?
Аноним 21/06/21 Пнд 04:56:50 749779 264
>>749760
Прост интересы.

Вот тут вон чуваки вообще свой собственный OpenGL изобретают
https://github.com/C-Chads/tinygl

и ничего. Вроде бы оно и бесполезно, не имеет никакого смысла. А вроде бы оно и интересно
Аноним 21/06/21 Пнд 17:13:20 749847 265
>>749763
Типа того, личный бзик. Кодить само по себе - не великое удовольствие, поэтому без доп стимулов бывает тяжело. А если понимаешь, что ты вот нормалечку тут распаковываешь или френельчика приблизительно рассчитываешь, то как-то сразу и на душе теплее и проебы при кодировании пережить легче.

Но вот этот >>749760 анон в чём-то прав, вполне допускаю, что это заниматься этим мне не сильно и нужно - иначе уже давно бы как-то перекатился бы в сферу. Но нет, я просто страдаю, что времени не хватает, а когда оно появляется - ничерта толкового всё равно родить не могу. Уже сколько месяцев планирую переделать рендеринг от накопленного прямого вызова а-ля onRender к формированию очередей. Такое себе.
С другой стороны унылее телекома только финансы и ебля с базами.
Аноним 21/06/21 Пнд 19:54:40 749913 266
>>749847
Почему тогда не выбрал что-то более высокоуровневое для так называемого криэйтив кодинга, типа процессинга, токсиклибс, опенфреймворкс?
Аноним 21/06/21 Пнд 21:48:33 749966 267
voxels.png 265Кб, 1920x1080
1920x1080
>>749913
Скажем так, личная история. Это второе моё место работы после госорга, где я кис почти 10 лет. Выкатился через чудом подвернувшуюся работу на околодвижковую тему - мечта прям, но не вытянул, всё же болотные корни сказались. Понятно, что после такого не до выбора было особо. Хотелось, чтобы платили и не говно контора была. В принципе, так и оказалось - грех жаловаться на условия. По деньгам уже в 2,5 раза вырос, коллеги норм, менеджеры не достают, плюсы 17ые вот местами подвезли даже. Но чёртовы кубы сидят в подкорке и шепчут.
Аноним 21/06/21 Пнд 21:50:38 749970 268
>>749913
Не так тебя понял, поскольку даже и не знаком оказался с предложенным тобой контекстом. Пойду просвещаться.
Аноним 13/07/21 Втр 18:17:05 753422 269
Аноны, очень нужна ваша помощь. Прямо жизнь от вас зависит. Нужно написать программу на опенгл, которая открывает 2д изображение и позволяет его вращать. В опенгл я полный ноль, не знаю даже в какую сторону копать.
Аноним 13/07/21 Втр 20:42:31 753465 270
>>753422
Если ты не мог даже шапку открыть и прочитать несколько уроков с сайтом то тебе, ебанату тупому, ничего не поможет.
Аноним 31/07/21 Суб 20:30:22 759296 271
>>749966
Никита, пиздуй на работу. Что ты тут забыл?
Аноним 02/08/21 Пнд 13:02:48 759756 272
>>759296
Макс, заебал, у тебя докер образ под центось до сих пор не готов, а ещё что-то пиздишь.
Аноним 07/08/21 Суб 14:56:19 761973 273
Аноны, привет. Надеюсь, вы еще живы. Вопрос глупый, но надеюсь, вы сможете пояснить мне что к чему.
В чем преимущество OpenGL над Vulkan? Ведь по сути Vulkan это более улучшенный OpenGL. Просто вижу, что в основном все до сих пор используют именно OpenGL. С чем это может быть связано? С непонятным API и его дрочкой или все же есть более весомые причины?
Спасибо!
Аноним 08/08/21 Вск 10:04:36 762424 274
>>761973
Преимущество только в более простом API и, возможно, более широкой поддержке на старых устройствах.
На огле, чтобы написать вращение кубов достаточно одного дня, если начинаешь совсем с нуля. В вулкане - сложно сказать, ведь сначала надо продраться через всю программную модель, управление ресурсами, написать весьма объёмный бойлерплейт, обернуть его в удачные абстракции для удобства.
Ну и в итоге, если ты рендеришь относительно скромные сцены, не генерируешь очереди отрисовки в куче потоков - ебаться с таким уровнем сложности нахой надо.
Аноним 09/08/21 Пнд 11:29:15 762849 275
изображение.png 34Кб, 419x950
419x950
>>761973
Никакой весомой причины.

А обратный вопрос, в чем лучше vulkan?
На нём мои 103 куба и 17 треугольников быстрее рисоваться будут? Или такой же шейдер как на opengl внезапно станет работать в два раза быстрее, потому что у карточки внезапно частота в два раза увеличится? Может быть больше документации и примеров в сети?

Да вроде нет ничего подобного. То есть даже если откинуть, что opengl я использую 10 лет - если бы я начинал с нуля, я бы скорее снова выбрал opengl с достаточно большой вероятностью.
>С непонятным API и его дрочкой
Вот скриншот туториала по вулкану. Какая-то хуета про физические устройства и другой мусор - зачем мне это нужно, если 98% кода я буду копировать из раза в раз, и меняться будет только место, где я вершины и шейдеры указываю? И рядом есть opengl, где можно написать glBegin и нарисовать треугольник. И даже если не glBegin - я всё-равно указываю буфер с вершинами - и код рисовки занимает больше места, чем код инициализации, который занимает 10 строчек, а с каким-то sfml/glut или что там - вовсе 1-3.
Да, проблема в этом. Нет мотивации этим заниматься в вулкане, если есть возможность этим не заниматься вообще. И пока не появится какая-то легковесная фигня, которая произведёт всю нужную инициализацию в пару строк, или пока не появится каких-то нужных вещей, которых не будет в opengl - то vulkan выглядит достаточно непривлекательно.

Аноним 09/08/21 Пнд 12:53:23 762867 276
>>762424
>>762849
Спасибо за разъяснения!

>более широкой поддержке на старых устройствах
Да, Vulkan поддерживается на более новых железках. У меня второй комп с Nvidia 820M - она как раз не может в Vulkan. В то время OpenGL существует на более старых железках вполне себе спокойно.

>А обратный вопрос, в чем лучше vulkan?
>Или такой же шейдер как на opengl внезапно станет работать в два раза быстрее, потому что у карточки внезапно частота в два раза увеличится?
Насколько я знаю, Vulkan получает больше контроля над GPU. Наверное, на этом все преимущества и заканчиваются. Жалко, что ни одно API не является опенсурс, мы бы могли посмотреть на функции у двух API и сравнить их реализацию.

>opengl я использую 10 лет
Реально огромный стаж, круто! Что сможешь посоветовать и как вкатиться по-человечески, анонче?

>И пока не появится какая-то легковесная фигня, которая произведёт всю нужную инициализацию в пару строк
Будем надеятся, что будущие разработчики будут пытаться делать что-то более оптимизированное в плане структуры, ну и функций соответственно.

Спасибо!
Аноним 09/08/21 Пнд 13:35:46 762874 277
>>762867
>Vulkan получает больше контроля над GPU.
А он тебе нужен? Ты будешь его использовать? У тебя какая-то игра с феноменальными требования к производительности, и потому тебе нужно запариваться ради +10% или даже меньшего? Сейчас вроде все кладут на это, мол карточки скушают любое говно. Нет смысла дрочить производительность, потому что успех игры очень слабо с ней связан и логичнее делать упор на другие аспекты, если у игры нет прям совсем жёстких проблем с производительностью.
Аноним 09/08/21 Пнд 13:37:08 762875 278
>>762867
> ни одно API не является опенсурс, мы бы могли посмотреть на функции у двух API и сравнить их реализацию.
На собесе такое не ляпни только, лiл. API на то и API, что это не более чем интерфейс к железке, точнее к драйверному уровню. Поэтому в самом вулкане или огле нечего смотреть и сравнивать, имплементация зависит от вендора и является смесью кода и аппаратных особенностей.
Аноним 09/08/21 Пнд 16:40:45 762952 279
>>762874
>>762875

>А он тебе нужен?
Я просто люблю рыться в подобном говне, реверсер по жизни, лул.
Нет, конечно, для моих скромных проектов это не пригодится на данный момент, это просто к слову о преимуществах было. Использовать или не использовать - немного другой вопрос, как по мне.

>На собесе такое не ляпни только, лiл
Моя оговорка, да.
Аноним 13/09/21 Пнд 05:30:25 769420 280
Сап. Сегодня на паре по программированию дед задал дичь, типа там молекулы, связи и прочее. Нужно будет в вводить все картонкой, и соответственно использовать OpenGL, типа в 3х мерном пространстве и чтоб крутить модно было. Что ожидать? Сложно ли вкатиться?
Аноним 13/09/21 Пнд 05:49:33 769423 281
>>762867
>Жалко, что ни одно API не является опенсурс
Драйвера ATI опенсорс, бери и смотри.
Аноним 13/09/21 Пнд 08:16:19 769425 282
>>762874

Реально вулкан лучше тупо качеством реализации в драйверах, пушо на опенгл при фичах > 3.3 пики точеные и хуи дроченые практически гарантированы.
Аноним 13/09/21 Пнд 17:25:06 769478 283
>>769420
Если просто молекул поделать, то легче изучить рейтресинг/реймаршинг и набросать шейдер.
Аноним 21/09/21 Втр 03:45:24 770259 284
>>738187
>Дум3 например каждый кадр пишет все вертексы-индесы в видеопамять заново
Кармак гений!
Аноним 07/10/21 Чтв 16:32:32 772146 285
>>678945 (OP)
Есть кулстори кто как вкатывался в погромисты графики? Как оно вообще работается?
Если я весь лёрн опенгл прочитаю и выполню упражнения, этого достаточно будет для устройства на работку?
Знаю в какой-то степени с++, алгоритмы и структуры данных более-менее норм, немного кумекаю в параллельном программировании, и том что к этой теме причастно.
Дохуя придется задрачивать/изучать по новой?
Сейчас на текущей работке заканчивается проект, есть варик либо там же остаться, но переключиться на компуктер вижен. Но во влажных мечтах хочется работать с графонием, геометрией, математикой и всем таким хотя я туповат, матан в универе сдавал на тройки, не хватало усидчивости все задрочить
Аноним 07/10/21 Чтв 21:45:52 772180 286
>>772146
Знакомый просто студентом ходил на стажировки всякие в гемдев кампании, так и попал на джуна

ну а требования лучше всего в самих вакансиях смотреть
Аноним 07/10/21 Чтв 21:47:26 772181 287
видя то что он там делает, он в особо тяжёлую Математику и геометрию не лез никогда, чисто в движке ковыряется и всякие баги чинит
Аноним 11/10/21 Пнд 16:10:36 772514 288
>>772146
Есть история неудачного вката.
Депрессовал, работал в нии, лечил голову. Как больменее полегчало - решил пора бежать. Наудачу закинул письмо в одну из немногих местных контор, пилящих графен. Ни на что не рассчитывал, тк с самооценкой и так плохо + понятно, что такое работа в НИИ. Но мне ответили, отсобесили, готовы были брать вотпрямщас. Я знатно подохуел - думал во попёрло то.
Но всё быстро встало на свои места, когда первым делом надо было быстренько запилить игровой мини-проект на основе собственного продукта. Конечно же я всрал всё проверки на производительность, да и ai хоть сколько-нибудь интересный не написал. Ну и код говнистый вышел.
Короче, вежливо попросили.
В принципе негатива не осталось, всё чинно прошло, даже всё выплатили по отработанному времени. Но веры в себя, кончено, не добавило.
Теперь сижу в унылых телекомах за х2 от того, что тогда просил и не отсвечиваю, ковыряю лениво опенжл и вулканчик в меру своих возможностей.
Аноним 11/10/21 Пнд 17:49:47 772522 289
>>772514
Расскажи конкретнее, как вежливо попросили, какой был разговор?
Аноним 11/10/21 Пнд 22:42:16 772576 290
>>772522
Да просто ясно и без экивоков сказали, что нет возможности натаскивать меня, нужен более сильный специалист. Пишем по собственному и расходимся. Всё культурно.
Аноним 12/10/21 Втр 11:57:28 772623 291
>>772576
Ты один на проекте весь графоний тянул? Твои работодатели сами какие-то неопытные получается. Они на собесе должны были понять твой уровень, потом посмотреть на тебя на тестовом, потом пустить тебя в проект под присмотром старшего, а потом уже давать самостоятельности. А они возложили всю ответственность за графоний на новичка, который никогда профессионально этим графонием не занимался.
Аноним 12/10/21 Втр 12:25:15 772627 292
>>772514
>Наудачу закинул письмо в одну из немногих местных контор, пилящих графен.
>надо было быстренько запилить игровой мини-проект на основе собственного продукта
Так они графенщика хотели, или мастера на все руки?
Аноним 12/10/21 Втр 13:48:30 772640 293
>>772623
>>772627
Вероятно, сумбурно описал суть. Это было а-ля тестовое задание, не кусок чего-то продового или целого проекта. И это была позиция не на ковырятеля движка, а именно под тулзы и проекты на его основе. Графоний там не был под вопросом практически.
Да, потом пришло осознание, что тестовое можно было бы и заранее дать, даже если объёмное - по сути ведь они мне его оплатили. С другой стороны, это помогло мне уйти из госнии и кратно повысить доход. С третьей стороны у меня теперь столько работы, что о вкате в околографику, считай, можно забыть. Да и не то, чтобы был особый выбор на рынке.
Аноним 18/10/21 Пнд 20:26:23 773648 294
Объясните пожалуйста доступным языком, для чего нужны библиотеки типа glad, glew и и.д.?
Аноним 18/10/21 Пнд 21:14:30 773660 295
>>773649
Это разве не работа компановщика?
Аноним 18/10/21 Пнд 21:16:10 773661 296
>>773649
или они в рантайме подгружаются?
Аноним 31/10/21 Вск 18:54:43 775502 297
16356819357120.png 42Кб, 432x473
432x473
16356819357121.png 32Кб, 948x354
948x354
>>>678945
Сап. Колупаю опенгл и попутно пилю арканоид.
Почему при спавне нового астеройда, меняют форму все? Как фиксить?
В интернетах советают использовать glpushmatrix и glpopmatrix, но чет не помогает
Аноним 31/10/21 Вск 19:02:09 775503 298
>>775502
Как там, в 2003? Шейдеры уже завезли?
Аноним 31/10/21 Вск 19:32:37 775506 299
>>775503
Хотел сеачала на современном гл писать, но там чет сложна. Хочу со старья начать
Аноним 31/10/21 Вск 21:07:54 775512 300
>>775506
Зря время потратишь
Тебе так или иначе придется новый учить
Аноним 02/11/21 Втр 04:38:50 775684 301
>>701849
На WebGL 250-300к гребу в месяц. Похоже на работу мечты, на самом деле.
Аноним 02/11/21 Втр 04:40:56 775685 302
Аноним 02/11/21 Втр 06:04:34 775688 303
>>775684
Размещаешь на страничке трёхмерные трусы для рекламы магазина белья?
Аноним 02/11/21 Втр 10:24:31 775699 304
>>775684
Подробнее можно, что конкретно делаешь, как вкатился, какой предыдущий опыт?
Аноним 02/11/21 Втр 15:36:39 775756 305
>>775699
>>775688
> Размещаешь на страничке трёхмерные трусы для рекламы магазина белья?
Нет

Всю жизнь любительски занимался OpenGL, графоном и математикой, со школы ещё. Игрушки делал свои, чужие модифицировал. Потом принял участие в разработке графического движка в вебе уже на полностью коммерческой основе, но в довольно парашной конторе, хотя коллеги там были охуенные, я б с ними ещё поработал. Оттуда меня просто захантили и выдернули пилить убийцу Юнити за многаденег. Там много очень проектов я веду, но везде, как рендер инженер. Все связаны либо с прямой графикой, либо с обратной.

Самое смешное, что меня не взяли делать движок для тридэ трусов в магазине белья, мол, опыта мало, а через полгода захантили на более сочное место. Примерно тогда же, через полгода, пытались всякие Варгейминги к себе рендер инженером утащить, но, очевидно, предложили меньше, раз я не там.
Аноним 02/11/21 Втр 17:15:47 775776 306
>>775756
Успешный человек итт, завидую белой завистью.
Кстати, чего думаешь о webgpu, готовы ли подсаживаться в будущем на него?
Аноним 02/11/21 Втр 19:15:36 775794 307
>>775776
Вообще, мне очень нравятся все поползновения в сторону унификации процессов на видеокарте. Просто буферы, просто операции над числами. Так проще делать и графон, и физику, и всякие другие вкусности на видюхе.

Проблема только в поддерживаемости этих штук на разных устройствах. Если будет так, что бизнесу не выгодно переходить на webgpu, потому что устройства части пользователей не потянут, мне зелёный свет не дадут. Плюс библиотеки желательно иметь. Нет библиотек для работы с картами на webgpu, а игровой движок, например, уже есть, в октябре, вот, портировали Вавилон. Соответственно, переползать частично уже можно.

Свои штуки пока что пилю на WebGL2, хватает для моих нужд, но я книжек начитался, во всякие Pulling Vertices умею, то есть без всяких геометрических шейдеров обойтись могу, например.
Аноним 02/11/21 Втр 19:21:02 775795 308
>>775794
А ещё добавлю, что важно не забывать про всякие разные применения графона помимо гейдева. Заработать на этом можно, главное не плеваться, когда предлагают другие сферы. ГИС, медицина и прочие мультимедиа.
Аноним 02/11/21 Втр 19:32:42 775797 309
>>775795
А какой минимум надо знать, чтобы претендовать на заработок, что бы ты на собесе спрашивал?
Аноним 02/11/21 Втр 19:56:09 775799 310
>>775797
В идеале портфолио. Потому что графон лучше видно на картинке, очевидно. Вопрос, который можно считать классикой, это вопрос про то, что такое ортогональная матрица. Если на него не ответить, и портфолио нет, можно особо не рассчитывать тогда. Я не знаю, почему так сложилось, но такой вот прикол заметил. Если хочется именно в гейдев, знать базовые штуки, вроде PBR, HDR, подповерхностное рассеивание, отложенный рендер, отражения, переходы между пространствами. Касательное пространство, мировое, локальное, видовое, клип спейс. Вообще, знать пайплайн отрисовки обязательно. Если что-то из этого ручками не делал, но знаешь термины, где посмотреть, сможешь по гайдам базовую реализацию сделать, то уже хорошо. Морфинг, скелетная анимация, иногда инверсная кинематика.

Если нет цели делать или переделывать движки, то достаточно представлять, что это такое и как с этим работать. 7 лет назад даже на английском не было особо литературы на эти темы, сейчас есть даже на русском. Учи сколько влезет.

Если уместить это в одно предложение, то достаточно шарить в математике 10-11 класса, линейную алгебру знать на уровне первого курса технического универа. Все остальное это уже применение этих знаний.
Ну, про то, что надо уметь писать код, я умолчу, это и так понятно. Могут спросить алгоритмы, структуры данных, но это, скорее, убедиться, что ты не овощ. Можем списаться в телеге, обсудим подробнее.
marco.franchetti@ya.ru
Аноним 02/11/21 Втр 20:37:03 775803 311
>>775799
Сейчас у меня знания только по школьной программе, основам линала и немного по шейдерам, простенький софт рендениринг писал по туториалам. Думаю, стоит ли вкатываться, вот начну сейчас опенгл учить и лет через 5 только смогу на джуна претендовать. Как у тебя так получается, со школы выбрать тему и продолжать долбить ее? Меня вот все метало, то рисовать хотел, то 3д моделить, то пиксельарт, то геймдизайнить, то графику прогать.
Аноним 02/11/21 Втр 22:01:10 775814 312
>>775803
У меня с пяти лет ясность и понимание того, что хочу. В пять лет понял, что хочу быть погромистом и делать игры, в седьмом классе начал делать игры, в десятом классе понял, что в играх больше всего нравится делать графику, после универа это стало монетизированным хобби.
5 лет учить это не придется, можно вкатиться так же быстро, как и в любой другой нормальный кодинг, за год-полтора. Нет, не месяц или два, за такое короткое время ящитаю не вкатишься
Единственное, математику знать и понимать нужно, но это для любых технических профессий, вроде как, мастхэв, так что можно особо не учитывать.
Ну, а ещё если есть, кому учить тебя, то совсем просто становится. Я-то сам шишки набивал, а ты сейчас можешь кучу гайдов посмотреть.
Но, как и в любом деле, практика важна. Если ты пять лет реально кодить будешь, а не курсы от скиллбокса на фоне слушать, то спокойно станешь сеньором за это время.
Аноним 02/11/21 Втр 22:07:24 775815 313
>>775814
Ну все, вдохновил, завтра сажусь учить опенгл.
Аноним 03/11/21 Срд 00:36:39 775823 314
Аноним 03/11/21 Срд 01:35:59 775829 315
Аноним 03/11/21 Срд 07:37:06 775836 316
>>775756
>либо с прямой графикой, либо с обратной.
Что такое "обратная графика"? Распознавание изображений?
Аноним 03/11/21 Срд 09:47:37 775841 317
>>775836
В узком смысле да. В широком она в себя включает распознавание изображений, но не только его.
Аноним 03/11/21 Срд 10:09:15 775847 318
>>775841
А ещё что включает?
Аноним 03/11/21 Срд 10:11:08 775849 319
>>775847
В целом, любые анпроекции из 2d в 3d.
Аноним 03/11/21 Срд 10:14:30 775850 320
>>775849
Где можно почитать? Не нахожу такого термина в гугле - "обратная графика". По каким ключевым словам искать?
Аноним 03/11/21 Срд 10:20:39 775851 321
>>775850
Уф, начинай с компьютерного зрения. Возможно, мой термин не самый правильный. Он у нас с коллегами устоялся, но не факт, что он общепринятый.
Аноним 04/11/21 Чтв 13:29:30 776101 322
image.png 44Кб, 1500x500
1500x500
Аноним 04/11/21 Чтв 14:48:58 776120 323
image.png 537Кб, 1154x599
1154x599
image.png 210Кб, 1216x719
1216x719
>>775814
>Я-то сам шишки набивал, а ты сейчас можешь кучу гайдов посмотреть
Тут и плюсы и минусы. Информации море, не понятно что, в какой последовательности и до какой степени глубины изучать. Можно обложиться десятью учебниками линала, которые за 2 года не прочитаешь, а до практического программирования так и не дойти. А вот трансуха Freya Holmér за 10 лет карьеры в геймдеве не знает, как матрицы умножать, но написала визуальный редактор шейдеров для юнити, который неплохо продался и позволил ей уйти с работы по найму.
Аноним 04/11/21 Чтв 15:00:36 776122 324
>>776120
Так написать нодовый редактор шейдеров это пара вечеров. Там не нужно знание математики, не нужно знание самой графики, это просто кодогенератор из графа. Фишка в том, что это была новинка, никто такого раньше не делал, а не в каком-то мега навыке или узких знаниях.
Аноним 04/11/21 Чтв 15:17:56 776127 325
>>776122
Нужно хотя бы умение программировать шейдеры. Я не говорю о том, что это сложно. Я о том, что она видимо отучилась в каком-то геймдев ПТУ, где ее за ручку провели в индустрию, давали исключительно практические и актуальные навыки/методики, не особо углубляясь в теорию. А если бы она обучалась сама, хаотически, могла бы, например, копать линал до каких-нибудь проективных модулей.
Аноним 04/11/21 Чтв 15:41:21 776133 326
>>776127
Хз, редкий человек сам так раскопает линал, а основам cgi в любом техническом вузе учат без углубления во все тонкости. Простейший шейдер и базовый пайплайн отрисовки расскажут.
Аноним 04/11/21 Чтв 16:48:58 776140 327
Что по modern opengl почитать? Тыкал раньше во времена glBegin, дисплей листов и прочего такого. Хочу простенькое 2д порисовать, вроде немного оверкилл конечно.
Аноним 04/11/21 Чтв 16:53:52 776141 328
>>776140
>простенькое 2д
типа чего?
Аноним 04/11/21 Чтв 17:01:59 776143 329
>>776141
Хочу небольшой tower defence сделать. Тайловая карта, спрайты, линии.
Аноним 04/11/21 Чтв 17:04:07 776144 330
>>776143
Почему не взять либу, которая умеет рисовать спрайты и линии?
Аноним 04/11/21 Чтв 17:07:32 776145 331
>>776144
Потому что я аутист Хочется попердолиться на низкому уровне, может еще разобраться с современными профайлерами.
Аноним 04/11/21 Чтв 17:20:00 776149 332
>>776140
Годный гайд по модерну выше уже писали - learnopengl.com
На Хабре есть перевод частичный.
Аноним 04/11/21 Чтв 17:39:42 776151 333
>>776145
Тогда тебе нужен вулкан, или пиши свой драйвер и юзермод либу к нему.
Аноним 04/11/21 Чтв 21:50:34 776189 334
>>776151
Это на самом деле звучит жутко интересно, и вулкан изучить с нуля и в драйвере mesa на прыщах поковыряться. Только на это нужно какое-то нездоровое количество времени. А меня только на 2д-хуиту со своим движком чувствую хватит.
Аноним 06/11/21 Суб 03:31:31 776328 335
Пытался написать объемные облака на шейдертое и отвалилась видюха. Бывает такое или графика не мое?
Аноним 06/11/21 Суб 10:29:41 776343 336
>>776328
Сложно себе такое представить. Может, ты просто не переключил дефолтную видюху с интегрированной на дискретную. Считай, решил гвозди позабивать киянкой, а нужен для этого молоток.
Аноним 23/12/21 Чтв 11:30:40 781819 337
Сижу на линухе, решил попробовать нарисовать треугольник с помощью OpenGL, по гайду как на learnopengl.com, столкнулся с проблемой. #include <glad/glad.h> пишет "Директория/Файл не найдены"
Не нравится мне что glad нужно в папку с исходным кодом кидать, ох если бы он был в /usr/lib
Подскажите аноны, что можно сделать? Мне сейчас чисто по гайду бы glad. потом может и перейду на что другое. Пока в плюсах новичок
Аноним 23/12/21 Чтв 14:27:12 781837 338
>>781819
Ставь glew, он везде должен быть в репах.
1) Везде в модулях где юзаешь OpenGL пишешь только #include <GL/glew.h>
2) перед самым первым обращением к OpenGL делаешь инициализацию glew, у меня например так:
GLenum glewResult = glewInit();
if ( glewResult != GLEW_OK ) {
printf( "GLEW Error: %s\n.", glewGetErrorString( glewResult ) );
return false;
}
Я даже поставил это после SDL_GL_CreateContext, и работает норм.
3) в настройках сборки проекта в своей среде пишешь в список библиотек GLEW и GL.
4) PROFIT!
Единственное, если правильно помню, когда будешь собирать проект под cygwin/mingw/msys, надо будет дополнительно рядом с экзешником положить дллку от glew, ну там вообще собрать redistributable - немного повозиться с ldd.
Аноним 23/12/21 Чтв 14:27:58 781838 339
>>781837
Макаба ибаная, табы в коде в \t превратила, ну ты понел.
Аноним 23/12/21 Чтв 15:40:11 781844 340
>>781837
За glew спасибо, сейчас попробовал glut (нашёл его раньше). окно спокойно запустилось.
Какая меж ними разница? Смогу ли я потом легко перейти на glew?
Чёт меня поражает что есть куча подобных либ, ещё попробуй пойми что к чему.
Аноним 23/12/21 Чтв 16:46:37 781860 341
>>781844
Glew и glut - это две большие разницы. Glew - это чтоб легко и просто подключить функционал OpenGL выше 1.1 (#include <GL/gl.h> даст только старую версию API). Советую glut выбросить и забыть, eсли тебе нужно чем-то создавать окна, а потом еще и обрабатывать ввод - бери SDL, он уже в ряде движков давно используется именно для этих целей.
Дохрена уроков с glu и glut болтается в интернетах, но они устарели чуть более чем полностью, выкинь их. Например функции типа gluProject - для установки проекционной матрицы при использовании fixed pipeline, это было 15 лет назад актуально, а после выхода OpenGL 3.0 стало говном мамонта, сегодня ты сам отвечаешь за матричную арифметику, сам запихиваешь все в шейдеры.
Аноним 28/12/21 Втр 22:51:21 782510 342
Насколько реально использовать векторную графику на 3д объектах/полигонах. Есть ли примеры?
Аноним 28/12/21 Втр 22:55:09 782513 343
>>782510
Шта?! Полигоны по-твоему растровые?
Аноним 28/12/21 Втр 23:01:42 782515 344
>>782513
Будешь ты "HD" картинку делать только из полигонов?
Я имею в виду проекцию векторной текстуры на полигон, что бы при увеличении не было как с растровой графикой. Я понимаю что векторная приносит свои ограничения, но для Low Poly с текстурированием, очень даже зайдёт. Однако если использовать растровую графику, можно будет увидеть отдельные пиксели, независимо от размера холста (при увеличении). Да и грузить дохуя большое изображение для текстуры это расход памяти. При растровых текстурах ты сможешь увидеть только собственные пиксели экрана, увеличивай сколько хочешь. Ну думаю ты знаешь.
Аноним 28/12/21 Втр 23:10:04 782518 345
>>782515
>При векторных текстурах ты сможешь увидеть
фикс
Аноним 28/12/21 Втр 23:12:28 782520 346
>>782515
Видел статью про векторные текстуры от чуваков из Apple и Intel. но там вроде фпс был в районе 20.
Аноним 28/12/21 Втр 23:16:50 782522 347
>>782520
Грустно. Что ж, спасибо за инфу, поищу
Аноним 29/12/21 Срд 00:07:10 782524 348
>>782515
Вот пропустил ты слово "текстуры" - и стало нихуя непонятно, что ты имел в виду.

Если текстура монохромная, либо тебе достаточно небольшого числа цветов, то я бы попробовал SDF. На самом деле это растр, но хитрый. Качество может быть и не как у реального векторного изображения, но думаю, что это лучшее, что можно получить балансируя между расходом памяти и производительности.
Аноним 11/01/22 Втр 13:06:28 784824 349
>>776120
Даже любопытно стало, можешь скинуть таймкод там где она не умеет матрицы умножать, наоборот казалось, что она в видео объясняла какую-то совсем простую базу.
Аноним 11/01/22 Втр 17:43:42 784879 350
>>784824
Путается, как составить матрицу трансформации
https://youtu.be/XiwEyopOMqg?t=6737

Говорит, что догадывается, как умножать матрицу на вектор, но не уверена. А как искать обратную матрицу вообще не знает.
https://youtu.be/XiwEyopOMqg?t=7264

Наверно можно пользоваться исключительно библиотечными функциями, но я думал, графический программист не должен плавать в этих вопросах, это же база.

Аноним 11/01/22 Втр 17:52:24 784881 351
>>784879
Спасибо!

Есть еще вопросик, наверняка платина для этого треда. Что почитать-посмотреть что бы раз и навсегда разобраться с матрицами, векторами и операциями над ними в рамках изучения opengl? Лучше, конечно, что-то доступное, короткое. Этого хватит? https://learnopengl.com/Getting-started/Transformations или пойти дальше по ссылкам, которые автор в статье приводит. Предпочтительно русский, но смогу и с источниками на английском. Да и в целом что там еще понадобится из линейной алгебры?
Аноним 11/01/22 Втр 18:11:49 784882 352
>>784881
Хочу уточнить, что я ее не осуждаю. Может и правильно, что надо не глубоко копать в теорию, а в первую очередь осваивать практические навыки. Вся линейная алгебра - это перебор, а источника, где объяснялось бы все что надо подробно и при этом без лишнего, я не знаю.
Аноним 11/01/22 Втр 18:23:38 784885 353
Аноним 11/01/22 Втр 21:16:25 784898 354
>>784879
Посмотрел на превью видео, у неё там ещё зелёный с красным перепутаны.
Обычно люди обозначают ось X красным, ось Y зелёным, а Z синим. Ладно уже борьбу, что Y или Z — высота, но цвета-то лучше правильно изображать.
Либо она так и обозначила, но система координат в другую сторону закручена. Видео не смотрел, мог ощибиться.
Аноним 12/01/22 Срд 03:19:48 784939 355
>>784898
> правильно цвет обозначать
Нет такого
Аноним 12/01/22 Срд 12:21:39 784990 356
>>784939
>>784940
Откройте почти любой 3D-редактор или геймэнджин. X обозначен красным, Y зелёным, Z синим.
Теперь посмотрите как у неё смотрят пальцы на превью.
Аноним 12/01/22 Срд 16:50:52 785085 357
>>784990
Если ты откроешь КАД для карапей, 3дмакс и анрыль, то ты в первую очередь заинтересуешься тем, что системы там разные, а цвета уж дело десятое.
Аноним 12/01/22 Срд 17:05:36 785088 358
>>784990
Что не так с пальцами на превью? Большой (X) - красный, указательный (Y) - зеленый, средний (Z) - синий. Показывает левой рукой, система координат левая, как в юнити.
Аноним 13/01/22 Чтв 16:49:05 785294 359
Ну что, рисователи треугольников, нашли свое призвание в графикс софтвер инжиниринге?
https://habr.com/ru/post/599575/
Аноним 13/01/22 Чтв 20:59:22 785323 360
>>785088
Хмм, и правда, моя ошибка.
Я думал, что Годот плохой с его обозначением высоты через Y. Но я не думал, что Юнити вообще с левой системой координат.
Аноним 14/01/22 Птн 09:51:22 785428 361
image.png 27Кб, 648x150
648x150
Юзаю библиотеку glm

Чёт там за фигня с матрицами?
В гайдах сначала translate потом rotate, но разве должно быть не наоборот?
Попробовал после этого ещё и размер изменить
выходит в glm порядок обратный, так что ли?
Зачем это сделано?
Аноним 14/01/22 Птн 16:04:06 785460 362
>>785428
Ну в шейдере у тебя будет TRS*vertex. Порядок применения как раз как надо: масштаб, поворот, перенос.
Аноним 14/01/22 Птн 16:34:56 785462 363
>>785460
Дело не в шейдере, в шейдер у меня поступают уже готовые матрицы
model
view
projection

Но, мне интересно почему в glm я сначало создаю еденичную матрицу, потом делаю перенос, поворот, масштаб.
Аноним 14/01/22 Птн 16:52:09 785464 364
>>785460
Ладно, может я туплю, в glm мы оперируем матрицами, а не вектором, так что может там и есть смысл в таком порядке,
Но уже в шейдере это выглядит как T R S vertex
Просто меня сильно запутало это, то что в программе я должен создавать матрицу модели, но применять действия в обратном порядке
Если всё же кто-то сможет мне объяснить, буду благодарен
Аноним 14/01/22 Птн 16:53:05 785465 365
>>785462
Ещё раз, итоговая матрица у тебя есть комбинация в следующем порядке T x R x S. Так ты передашь в шейдер. Поскольку в огл матрицы считаются column-major, то матрица ставится слева от преобразуемой вершины. Именно поэтому в коде у тебя порядок конкатенации обратный.
Аноним 24/01/22 Пнд 11:25:03 787292 366
Аноним 24/01/22 Пнд 11:48:21 787294 367
>>787272
Как вообще тени рисуют? Есть два основных алгоритма: теневые карты и теневые объемы. В первом случае ты рендеришь буфер глубины для всего, что попадает поле зрения источника света - теневую карту, затем при рендере тени в буфере кадра ты сравниваешь значения в теневой карте и расстояния от фрагментов до источника. Во втором случае ты ебешься с геометрией, которая попадает в поле зрения источника, чтобы создать новый геометрический объект, и при рендере кадра затемняешь то, что попадает внутрь этого объекта. И так каждый кадр. Если у тебя дисплейсмент - значит ты должен его воспроизводить и при рендере теневой карты, и при создании теневого объема. Никакой магии, только ебля.
Аноним 24/01/22 Пнд 23:09:22 787379 368
>>787294
>и теневые объемы
Уже считай нету - я по крайне мере за последние лет десять не видел нигде, вот в играх 2005 часто замечал, что там именно объёмы. Слишком сложная технология, зачем это нужно - если можно просто карту теней достаточного разрешения зафигачить? Да ещё и мягкие тени через теневые объёмы делать по идее только если постобработкой можно и выглядить это может не очень. А если у тебя есть растительность/сетка/что_угодно_ещё, где форма листьев передана текстурой, то - ну ты понял что будет с тенью - а буферу до фени, альфа-тест при заполнении буфера тени очень быстры, если не обрабатывать освещение и остальные каналы.
Аноним 24/01/22 Пнд 23:44:15 787381 369
>>787379
Ну, я рассказал то что знаю.
Касательно теневых карт ебля тоже немалая есть, одни только алгоритмы фильтрации чего стоят, или техника с моментами. А уж каскадные по-моему вообще на грани добра и зла, потому что либо они используются для камеры с прибитым гвоздями ракурсом и только для теней от солнца, либо что-то не покрывается тенями (ГТА5 страдала этим). И вроде их пихали даже в какие-то коридорные шутеры.

Какого угодно разрешения ты теневые карты не сделаешь, потому тебе их может быть нужно больше одной штуки, а видеопамять не резиновая, и свопаться как оперативка не умеет (на самом деле немного умеет с помощью драйвера, но лучше в рамках своего приложения на это не рассчитывать, и экономить память, а перезагрузку ресурсов делать самому). Да, еще надо генерировать после каждого рендера карты новые мип-уровни, иначе у тебя тени в далеких от камеры фрагментах будут мерцать, а для теневой карты фильтрация не такая, как для обычной текстуры, там надо не усреднять пиксели, а брать максимум или минимум в зависимости от того, в какой системе у тебя глубина пишется (z или 1/z - есть такие приколы). И вообще при любом текстурировании чем меньше разрешение текстуры, тем меньше кеш-промахов, меньше обращений текстурных юнитов к видеопамяти - быстрее рендер.

Ах да, у нас уже RTX 20 и RTX 30 есть, и на подходе RTX 40, ну так там все условно просто: пустили пучок лучей от фрагмента в источник света (пучок - потому что источник не точечный в 99.9% случаев, какой бы мелкий он ни был), сколько лучей долетело - такая доля освещения от источника придет во фрагмент. Далее ебля с оптимизацией, потому что пускать тысячи лучей в реалтайме - слайдшоу получится, а источников редко бывает одна штука на всю сцену, и еще вторичное освещение надо считать, фотонную карту держать для него или что-то в этом роде. И это тоже не все развлечения в процессе.
Аноним 25/01/22 Втр 19:46:59 787514 370
>>787381
> И вообще при любом текстурировании чем меньше разрешение текстуры
Точно? Я ни разу не видел, чтобы размер текстуры хоть в одной игре влиял на что-то кроме времени загрузки. Там же выборка из текстуры для конкретного пикселя никак не связана с размером текстуры.
Аноним 25/01/22 Втр 22:58:16 787555 371
>>787514
>Я ни разу не видел, чтобы размер текстуры хоть в одной игре влиял на что-то кроме времени загрузки.
Это только означает что производительность не упирается именно в чтение из текстур - и это в какой-то степени хорошо.
>выборка из текстуры для конкретного пикселя никак не связана с размером текстуры
Связана, особенно когда не одна-единственная отдельная выборка. Чем больше выборок делается в шейдере, и чем дальше они разнесены - тем больше чтений из глобальной памяти должен сделать текстурный юнит и передать конкретному ядру, а остальные в этот момент - постоят в очереди, текстурных юнитов на всех не хватит. Посмотри на развитие алгоритмов блюра, как там хитрят, чтобы уменьшить количество выборок относительно финального пикселя. Еще допустим у тебя анизотропная фильтрация в 16 выборок вместо одной. Опять же в настройках графики у игр нередко это идет как опция, а не стандарт.
Аноним 26/01/22 Срд 14:45:19 787628 372
>>787555
>ем больше чтений из глобальной памяти должен сделать
Это в теории. А можешь описать какую демку мне составить, чтобы была разница между текстурой 256х256 и 8192х8192, или между х1 и х16 анизотропной фильтрацией? Или в какой игре подобное приводит к изменению производительности?

>на развитие алгоритмов блюра
Так там стараются уменьшить количество выборок. А при изменении размера текстуры количество выборок остаётся таким же, просто они делаются из текстуры другого размера. И предположу что анизотропная х16 тоже на аппаратном уровне исполнена, и выполняется за такое же время как и обычная х1.
Аноним 01/02/22 Втр 04:10:09 788491 373
>>787628
В Скачи@Мочи приводит к изменению производительности. Вообще, сложно представить, как скачки по большему куску оперативы могут не повлиять на производительность.
Аноним 11/02/22 Птн 17:51:02 790733 374
Можно ли получить список текущих стейтов? То есть что там сейчас включено/выключено в стейт машине огла?
Аноним 12/02/22 Суб 09:49:04 790851 375
Аноним 12/02/22 Суб 13:37:58 790863 376
Аноним 20/02/22 Вск 06:13:07 792294 377
>>792104
Добро пожаловать в обработку ошибок в чистом С
Аноним 20/02/22 Вск 07:38:13 792296 378
>>792104
>Отдельный привет чувакам из SDL, которые дефайнят main.
можно отключить эту хуиту - нужно выкинуть из проекта sdlmain.lib и перед включением SDL поставить дефайн
#define SDL_MAIN_HANDLED

Ну и перед вызовом инициализации SDL взывать SDL_SetMainReady

Вот пример
https://wiki.libsdl.org/SDL_SetMainReady

----------------------------------------------
Да, ебаная наркомания, тоже ненавижу программистов которые наворачивают какую-то хуиту на ровном месте, там где это нихуя ничего не дает (даже если посмотреть код sdl main - то там нихуя не делается серьзного и важного - именно такого что нужно SDL).
Аноним 19/04/22 Втр 16:30:45 798581 379
Есть OpenGL 4.3 и код вида:
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texture_id1);
ну и для каждой следующей просто меняются GL_TEXTUREn,
можно ли с данной версией это сделать через цикл?
Вроде эту команду можно было бы заменить:
glBindTextureUnit(n, texture_id);
Но у меня версия 4.3
Аноним 19/04/22 Втр 16:39:13 798585 380
>>798581
Придумал такой способ:
glActiveTexture(GL_TEXTURE0 + 1);
glActiveTexture(GL_TEXTURE0 + 2);
Аноним 20/04/22 Срд 03:38:54 798620 381
>>790851
>Чому не Vulkan?
Потому что очередное поделие кроноса из жопы, мало того что сложно, так блядь оно и работает как говно.

Очень напоминает эпоху OpenGL 2.1 - напоминаю что тогда тоже раскочегарились и давай лепить миллион и одно расширение, которые конечно же работали только на паре видеокарт и через жопу (я даже еще помню как видеокарты покупали как раз проверяя - есть ли там нужные расширения)....

Короче, 99% геймдева поклало болт на OGL и писало игры на DX9-10-11, потому что Microsoft очень жестко ограничивала фантазию вендоров, Direct3D гарантировал что твоя игра будет работать везде где есть винда.
OpenGL вообще нихуя не гарантировал (кстати, попробуй сейчас позапускать демки с 2.1 - вангую что больше половины уже не рабочие... Я тут как раз пишу типа олдскулпроект, много рою старого кода, почти никакие демо не работают как должны были)

Потом пришел OpenGL 3.3 и наконец-то наступила стабильность. Наконец-то не нужно было делать хаки чтобы оно работало на всяких AMD или интел-встройках. В таком же виде оно ушло и на мобилы в виде GLES, где тоже удивительно стабильно.


И вот вулкан - первоначально-то они учитывали этот печальный опыт... А потом снова и опять. К примеру у меня где-то половина демок на вулкане не работает (из крупного например не работает рендер вулкана в bgfx, и разраб до сих пор не смог починить. и не в том плане что какая-то фича - он просто даже не может создать Instance с теми параметрами которые указал разраб bgfx)


Короче, через десять лет будет актуально. Сейчас это только для ААА разработчиков (ну вот как в свое время Кармак писал на старом OGL и у него одного до сих пор все работает в квайках)
Аноним 20/04/22 Срд 03:44:14 798621 382
>>798585
Да, именно так и делают (мне кстати интересно что на это пишет стандарт - есть ли гарантия что GL_TEXTURE0 +1 равно GL_TEXTURE1, GL_TEXTURE0 +2 равно GL_TEXTURE2 и т.д.... Но наверное похер, OpenGL менять уже не будут, а так все делают.


>>792104
Создавай debug context (но нужна поддержка 4.1), там можно обрабатывать каждую ошибку. glGetError бесполезная хуита

>>792104
>У меня только один вопрос - что употреблял человек, который это придумал?
Походу тогда все употребляли одно и тоже. Такой же алгоритм обработки ошибок и в WinAPI к примеру (который со времен доса не меняется), и даже вроде в си-шных либах
Аноним 20/04/22 Срд 08:15:51 798636 383
>>798620
А OpenGL сейчас какой самый актуальный и надёжный, последний или предпоследний, или ES?
Аноним 20/04/22 Срд 10:05:23 798639 384
Вопрос glGenTextures если первый вызов обычно возвращает texture_id 0 или 1?
Аноним 20/04/22 Срд 11:12:30 798643 385
>>798639
С 1.
0 - это сброс стейта в бинде текстуры (и других ресурсов). Можешь считать ошибкой если вернуло ноль

>>798636
>самый актуальный
4.6 самый последний, больше не будет
4.2-4.4 возможно можно юзать не боясь что где-то не будет работать
но не выше 4.3 на маках, так как эпл отказалось поддерживать огл дальше
3.3 самый стабильный и простой и точно будет на всех рабочих пк пригодных для игр.


ES - это мобилки, и оно плюс-минус равно 3.3
Аноним 30/07/22 Суб 18:48:02 824629 386
Какую библиотеку посоветуете для работы с OpenGl ?
Например Jogl, lwjgl.

Аноним 30/07/22 Суб 19:44:16 824640 387
И мне нужно что бы они работали сo swing.
P.S.- хочу сделать интро для моего проекта...
Аноним 30/07/22 Суб 21:48:57 824662 388
>>824629
jogl, java3d это что очень древнее, не пробовал ни разую А вот lwjgl3 отличный + в контексте этого проекта развивается еще много крутых либ и оберток от этого же автора. Для джавы тут как бы без вариантов. В свинг не пробовал встраивать, но вроде это не проблема.
Аноним 30/07/22 Суб 23:02:54 824674 389
>>824662
Блин, теперь стоит проблема в выборе между jogl и lwjgl3 ._.
Аноним 30/07/22 Суб 23:14:50 824677 390
>>824662
JOGL более прост в использовании нежели lwjgl, или мне не удалось найти годные туториалы...
Аноним 31/07/22 Вск 07:26:28 824734 391
>>824677
Глянул хелоуворлд, jogl более абстрактная обертка. Сразу и класс шейдера, текстура, вместо glfw окно похожее на свинг, рендер текста из коробки.
lwjgl тут выходит более хардкорным и близким к оригиналу. Из туторов я вот это читал https://lwjglgamedev.gitbooks.io/3d-game-development-with-lwjgl/content/ https://github.com/LWJGL/lwjgl3-wiki/wiki
Аноним 01/08/22 Пнд 15:18:30 825114 392
3eecb437ac.jpg 174Кб, 983x344
983x344
>>824662
А вот здесь сказано что JOGL лучше чем lwjgl !
Ресурс - https://www.tutorialspoint.com/jogl/jogl_overview.htm#
Перевод: Почему именно JOGL?
Он предоставляет полный доступ к API OpenGL (версии 1.0, 4.3, ES 1, ES 2 и ES 3), а также почти ко всем расширениям производителей. Таким образом, все возможности OpenGL включены в JOGL.

JOGL интегрируется с AWT, Swing и Standard Widget Toolkit (SWT). Он также включает свой собственный инструментарий Native Windowing Toolkit (NEWT). Таким образом, он обеспечивает полную поддержку окон.
Аноним 24/10/22 Пнд 10:57:31 835809 393
Слушайте а если я хочу чтоб мое приложение запускалось на максимальном количестве устройств, в том числе на всяком старом говне, я должен использовать какую-нибудь лохматую версию opengl? ну типа 2.1 или типа того? или даже на древних устройствах на современных драйверах есть поддержка скажем 3.3?
Аноним 24/10/22 Пнд 22:44:58 835931 394
>>835809
Ориентируйся на возможности WebGL1.0, оно есть почти везде, там специально выбрали самый минимум для широты поддержки железа. Вообще дело не в версии OpenGL, а в возможностях конкретной видюхи, которая может уметь через расширения больше, чем позволяет поддерживаемая версия OpenGL. Часто бывает, наоборот, какие-то возможности драйвер поддерживает, а по факту, например геометрические шейдеры считаются на проце, видюха их не умеет.
Аноним 24/10/22 Пнд 23:57:02 835945 395
Аноним 25/10/22 Втр 07:41:10 835967 396
>>835809
>на максимальном количестве устройств, в том числе на всяком старом говне
ну знаешь, 486 процессоры до сих пор работают и наверняка у пары дедов еще работают. А на ламповых компах и опенгл то не было
Ты уж определись какой именно уровень старого хлама тебе нужен.

А если под реальные задачи - то OpenGL 3.3, да. Это уровень DX 10 видеокарт. Либо 4.0 - оно вышло в один год

А вот даунгрейдить под 2.1 или 1.6 и ниже вообще не советую. Так как велик шанс что твое приложение не будет работать на НОВЫХ устройствах.
Драйвера под этот хлам никто не пишет. Да и в большинстве случаев оно сейчас эмулируется, что добавляет еще кучу новых багов к непофикшенным старым.
Аноним 25/10/22 Втр 07:44:49 835968 397
>>835931
> в возможностях конкретной видюхи
заебешься так делать, так как придется делать под все тысячи моделей видеокарт. Конечно же эти тысячи моделей должны лежать на столе физически - прелесть разработки тех времен, что документация не гарантировала работоспособность реальной железки (поэтому в нулевые годы многие игры работали никак). а еще ведь и разные версии драйверов....

Прелесть мажорных версий в том что либо видеокарта полностью поддерживает все функции, либо считается что она не умеет (даже если нет одной функции из пятиста)
Аноним 25/10/22 Втр 14:01:30 836007 398
>>835967
>Да и в большинстве случаев оно сейчас эмулируется
Кстати на виндовсе в браузерах даже современный WebGL транслируется в Direct3D через прослойку ANGLE, чтобы не полагаться на кривые драйвера OpenGL.
https://en.wikipedia.org/wiki/ANGLE_(software)
Аноним 25/10/22 Втр 21:19:04 836066 399
>>835967
>А вот даунгрейдить под 2.1 или 1.6 и ниже вообще не советую. Так как велик шанс что твое приложение не будет работать на НОВЫХ устройствах.
Будет без проблем. Тупо потому что этот код в дровах не меняется. Для мобилок больше 2.0 (ES) не нужно. Это уровень DX9, условно второго крузиса. Вряд ли у него будет рендер лучше.
Аноним 30/10/22 Вск 15:44:38 836961 400
image.png 125Кб, 832x685
832x685
image.png 37Кб, 720x303
720x303
Вот я колеблю вершины флага в вершинном шейдере. А чтобы нормали найти, пришлось считать производные по формуле из википедии. Их можно было бы посчитать, имея доступ к соседним вершинам той же грани, но как я понимают это невозможно в glsl? И как быть, если вершины двигать по какой-то аццки сложной формуле, что даже производную не посчитать?
Аноним 01/11/22 Втр 02:29:04 837293 401
>>836961
>И как быть, если вершины двигать по какой-то аццки сложной формуле, что даже производную не посчитать?
Почему не посчитать? Численно всегда можно: считай позицию вершины в p0: f(u,v) и потом еще две позиции p1: f(u+du, v), p2: f(u, v+dv), где du, dv - малые приращения, возьми 0,001, например. Тогда нормаль будет n = normalize( cross( p1 - p0, p2 - p0 ) ).
Не думаю, что формула сложная, там синусы-косинусы с интерполяцией скорее всего, просто ты алгебру забыл.
>но как я понимают это невозможно в glsl?
Это в принципе невозможно на видяхе, треугольники считаются параллельно, и соседние вершины еще могут быть не готовы. Можно считать нормали в пиксельном шейдере, но там сглаживания между треугольниками не будет.
Аноним 01/11/22 Втр 11:19:31 837306 402
IMG202211011108[...].jpg 2555Кб, 3000x4000
3000x4000
>>837293
Да, я ступил, не подумал, что для численного рассчёта не обязательно прям реальные соседние вершины брать, а можно любые 2 точки по близости рассчитать
>Не думаю, что формула сложная, там синусы-косинусы с интерполяцией скорее всего, просто ты алгебру забыл
Для флажка то мне моих школьных знаний хватило, но всего два синуса и smoothstep заняли страницу расчетов. Вот я и говорю, что для более сложного случая формулы на много листов расписывать не охота.
Аноним 01/11/22 Втр 13:07:36 837318 403
>>837306
>Вот я и говорю, что для более сложного случая формулы на много листов расписывать не охота.
Поставь матлаб какой-нибудь или максиму. Это быстрее, чем считать на листочке.
Аноним 01/11/22 Втр 14:28:31 837333 404
>>837293
А в компьют шейдере можно?
Аноним 01/11/22 Втр 14:52:31 837340 405
>>837333
>А в компьют шейдере можно?
В два прохода. Сначала заполняешь позиции в одном буфере, потом читаешь этот буфер, и пишешь в другой нормали.
Аноним 01/11/22 Втр 15:59:41 837358 406
1598399777940.png 202Кб, 1408x590
1408x590
>>836961
А точно все так сложно должно быть?
Вот например из туториала годота, нормаль считается усредненной суммой векторов в этом случае карты высот, иными словами, зачем тебе производная, когда можно просто взять непосредственно значения f(x-step), f(x), f(x+step)? А то, что она перпендикулярна, считается, кажется, cross - можно посмотреть в шейдерах воды, кстати там наверняка тоже считаются нормали от волны.
Аноним 01/11/22 Втр 17:53:30 837426 407
>>837358
Да, для флага бы подошло. Но в общем тут только для поверхностей описываемых формулой y=f(x,z), то есть как плоская карта высот. А если поверхность изогнется еще и вокруг оси X, например, то надо уже будет по честному векторное произведение считать, я так понимаю.
Аноним 01/11/22 Втр 18:03:53 837434 408
>>837426
Идея больше в том, что ты же все равно как то каждую вершину высчитываешь. А значит, можешь повторить вычисления для соседних и использовать для вычисления нормали.
Аноним 01/11/22 Втр 18:28:17 837440 409
>>837434
Основную эту идею я теперь понял.
Аноним 07/11/22 Пнд 02:53:32 838635 410
image.png 8Кб, 674x69
674x69
bushes60.gif 8767Кб, 988x297
988x297
image.png 102Кб, 1002x632
1002x632
Привет. Мне для топдауна нужна перспектива, которая была бы преувеличенной относительно высоты. То есть чем выше объект, тем больше его колбасит. Увеличение FOV это не то.

Для вершин это тривиально. Надо в нужный момент увеличить x/y по функции от z. В пример пикрелейтед.
Для простоты берём только x потому что можно не учитывать вертикальный угол камеры. Сейчас я это делаю после перемножения вершины с матрицей вида и перспективы.
Это работает, и даёт нужный мне эффект. вон объёмные кусты на пик2

Но из-за этого текстуры искажаются, если они отрисовываются не в горизонтальной плоскости пик3 в качестве примера как ведёт себя текстура. потом спрайты персонажей будут отрисовываться без перспективы. Я знаю, почему они искажаются affine texture mapping, но как это задёшево исправить в таком контексте?

Извините, если косо изъясняюсь.
Аноним 07/11/22 Пнд 05:14:39 838646 411
1655002485629.webm 2003Кб, 360x480, 00:00:33
360x480
1602684703767.gif 232Кб, 480x360
480x360
>>838635
Не знаю какая конкретно у тебя техника. Очевидно что если у тебя получается трапеция вместо квадрата, то всегда будут искажения. То есть тебе стоит держать все спрайты параллельно экрана, хз как ты будешь это считать, например по одной точке (левому верхнему углу) считать остальные точки.
Слышал про технику, не знаю ее точное название, или Sprite stacing, или fake 3d in 2d, или sprite layering. При ней все спрайты всегда параллельны экрану. Но конечно могут быть на разной высоте и двигаться с разной скоростью , давая параллакс.

https://www.youtube.com/watch?v=OYcLS1v5Bx8
Аноним 07/11/22 Пнд 09:06:37 838655 412
>>838635
Решение такое: не насиловать мозг и рисовать всё в честном 3D через шейдёр, вместо ручного преобразования координат каждой точки.
Аноним 07/11/22 Пнд 11:45:37 838663 413
image.png 76Кб, 1130x557
1130x557
image.png 236Кб, 672x264
672x264
image.png 53Кб, 400x141
400x141
>>838655
У меня как раз честное обычное триде. Просто с дополнительными трюками а-ля пик2. Вот ещё хочу усиленную перспективу. Она поверх обычного триде идет.

>>838646
Я стакинг как раз на кустах использую. Но мне нужны будут вертикальные стены, и лучше бы их в один заход отрисовывать.

Возможно, на моём скриншоте это было плохо видно, но моя проблема в пике 3б. Пока я использую обычное триде её не возникает (наклон как в зельде тоже проблем не вызывает, он не создаёт трапеции). Начинаю раздвигать ось - появляется эффект пс1. Может это можно как-то во фрагментном шейдере компенсировать?
Аноним 08/11/22 Втр 00:18:18 838843 414
>>838635
>Я знаю, почему они искажаются affine texture mapping
Если все вершины лежат в одной плоскости, то искажений не должно быть. Очевидно, ты где-то с расчетом z проебался, и вершины уезжают. В вершинном шейдере однородные (проективные) координаты xyzw, а не xyz. У тебя w скорее всего уезжает.
Аноним 08/11/22 Втр 01:43:07 838849 415
image.png 209Кб, 1002x632
1002x632
image.png 87Кб, 1002x632
1002x632
>>838843
Да нет, они в одной плоскости. Это же видно. Без инклайна тоже проверил.
Я не мог проебаться с расчётом z, потому что не я его рассчитываю.

Весь код в вершинном шейдере вотъ. Единственный элемент, который создаёт искажения - transformed.x *= distortion.
>>838663
Аноним 08/11/22 Втр 01:59:52 838853 416
>>838849
>transformed.x *= distortion.
Ты это в мировых координатах делаешь или после трансформации в экранные?
Аноним 08/11/22 Втр 02:15:11 838858 417
>>838853
Сейчас после трансформации так оно быстрее всего вставляется.
Но если в мировых делать, то то же самое искажение получается, я проверял.
Аноним 08/11/22 Втр 10:28:42 838894 418
>>838858
Думаю, можно поиграться с матрицей проекции тогда. Увеличивать FOV одновременно с масштабированием сцены.
Аноним 08/11/22 Втр 14:53:33 838938 419
image.png 228Кб, 1002x632
1002x632
image.png 73Кб, 952x542
952x542
perspective.gif 18742Кб, 976x571
976x571
Я, как мне кажется, решил проблему творчески.
Во-первых, я обнаружил, что мне не хватало объёма, потому что я пока делал зельда-эффект излишне сжимал z. Но это не относится к проблеме.

Вместо того, чтобы раздвигать x, я теперь сжимаю y, а x занимается перспектива. Искажения, если они есть, теперь будут не на стенах, которые стоят лицом к камере, а на боковых стенах, где их никто никогда не заметит. Надо только коэффициент сжатия подобрать, чтобы при перемещении камеры не выглядело странно.
Теперь всё выглядит как мне нужно.
Аноним 26/03/23 Вск 19:45:44 872597 420
>>678945 (OP)
Поч в glm странно поворот с помощью квартениона выглядит?
в теории p' = q p inverse(q)
в glm p' = q * p
Аноним 26/03/23 Вск 22:02:13 872634 421
Запускаю проект libgdx с помощью gradle, выбрасывает ошибку:

Could not resolve lwjgl-3.3.1-natives-windows-x86.jar (org.lwjgl:lwjgl:3.3.1)

Подскажите как исправить пожалуйста !
Аноним 26/03/23 Вск 22:31:45 872648 422
>>872634
Почитай тут чет пишут
https://github.com/libgdx/libgdx/issues/6878
В крации, если у тебя его нет локально, он должен скачаться из mavenCentral, попробуй убрать mavenLocal временно
Аноним 26/03/23 Вск 23:24:11 872668 423
>>872648
Спасибо за помощь. Там директория пользователя была на русском, а нужно на английском.
Аноним 26/03/23 Вск 23:27:20 872669 424
>>872668
Такое бывает в старом софте, еще часто пробелы нельзя.
Аноним 28/03/23 Втр 22:11:39 873058 425
>>872669
>старом софте
Последняя версия gdx-setup с офф. сайта :/
Аноним 29/03/23 Срд 17:41:49 873173 426
Почему в ApplicationListener при загрузке и установке изображения, оно отображается вверх ногами ? В ApplicationAdapter всё ок.
Аноним 01/04/23 Суб 16:47:35 873622 427
Как изменить цвет фона плавно ? Например от 255,255,255 до 0 ?
Пытаюсь с помощью for, но всё зависает... В дочернем потоке когда запускаю, компилятор ругается, что нужно менять интерфейс только в главном.
Аноним 01/04/23 Суб 16:55:49 873624 428
>>873622
Фигню какую то пишешь. А когда у тебя персонаж бегает, не зависает?
Аноним 01/04/23 Суб 23:22:49 873680 429
125125215215.png 32Кб, 704x398
704x398
>>873624
Вот здесь на 1 секунду зависает приложение, а затем сразу черный цвет устанавливается, без установки белого.
Аноним 02/04/23 Вск 04:04:22 873701 430
>>873680
Значит поток рендера нельзя усыплять.
Я же намекаю - заведи отдельную переменную. В рендере проверяй ее или ставь в цвет, если нужно плавное. В основном потоке (игровом) меняй.
Аноним 02/04/23 Вск 10:08:20 873716 431
>>678945 (OP)
Хочу понизить разрешение рендера, без уменьшения экрана, как это сделать можно? Как в геймдеве делают?
Условно экран 600х600, а рендериться и масштабируется картинка на в разрешении 300х300
В голову только приходит идея рендерить в текстурку и растягивать квадратик с этой текстуркой на весь экран
Аноним 02/04/23 Вск 14:16:30 873726 432
>>873716
так и делают ) точней вешают квад с шейдером который правильно самплит текстурку куда ты отрендерил сцену
Аноним 02/04/23 Вск 14:33:36 873729 433
>>873716
Скорее всего это единственный способ. Другой был бы на стороне создания окна, типа создаешь окно 600х600 но фреймбуффер только 300х300, но я смотрю многие либы так не умеют делать и рендерят только 1:1.
Аноним 02/04/23 Вск 15:56:30 873737 434
>>873701
Можешь по подробнее пожалуйста ? ,_,
Аноним 02/04/23 Вск 16:35:02 873740 435
>>873737
Нет, не могу. Ты игру сделал? Саму игру, где спрайт какой-нибудь двигается? Игра не зависает, когда координата меняется каждый кадр? Как ты его двигаешь, так же и цвет фона "двигай".
Аноним 02/04/23 Вск 18:30:21 873752 436
63636373.png 50Кб, 1302x579
1302x579
>>873740
Дошло ! Только, почему когда значение переменной равно 47, экран уже белый ? Должно ведь 255 быть...
Аноним 02/04/23 Вск 19:34:21 873756 437
>>873752
Ты пишешь число inc, а выставляешь цвет inc * getDeltaTime, в этом может быть дело.
Аноним 02/04/23 Вск 21:42:15 873771 438
>>873756
Если уберу getDeltaTime(), с одного клика, цвет станет белым...
Где логика ?
Аноним 04/04/23 Втр 18:33:33 874102 439
Подскажите пожалуйста, как реализовать падение обьекта под углом ?
Аноним 04/04/23 Втр 19:08:12 874103 440
>>874102
Вариант А
Вектор гравитации, который повернуть на угол, это если его надо поменять

Вариант Б
Просто вычитание вертикальной координаты у объекта, который движется в горизонтальном направлении
Аноним 07/04/23 Птн 21:59:13 874754 441
unity vs libgdx ?
Аноним 07/04/23 Птн 23:07:43 874768 442
Аноним 09/04/23 Вск 22:22:43 875075 443
Как создать скин для TextField ?
Создаю с помощью skin composer, пытаюсь взять его, а мне бросает эксепшен Error reading file: textfield/text.json
Caused by: com.badlogic.gdx.utils.reflect.ReflectionException: Class not found: atlasData
Аноним 09/04/23 Вск 23:37:11 875082 444
>>875075
Получилось, нужно было нажимать кнопку export вместо save в skin composer...
Аноним 10/04/23 Пнд 21:25:52 875176 445
дарова, у мя матеша на 9 класса, что после школьной матеши изучать, чтоб тож треуголники да квадраты рисовать, мб книги какие нибудь, есть у кого нибудь гайдик что и куда дальше изучать?
Аноним 11/04/23 Втр 17:49:00 875256 446
>>875176
Красная книга опенгл
Можешь попробовать посмотреть Udemy Modern OpenGL, но тебе придётся искать 18 урок, так как его нету, там про камеру, вполне исчерпывающе, на англицком
Аноним 19/04/23 Срд 23:24:22 876352 447
Подскажите пожалуйста, как бесконечно отрисовывать текстуру (карту) ?
Аноним 22/04/23 Суб 00:46:49 876521 448
Аноним 22/04/23 Суб 01:47:42 876525 449
Аноним 22/04/23 Суб 12:58:52 876560 450
Аноним 25/04/23 Втр 23:32:07 876924 451
Как отрисовывать раз в несколько секунд одну текстуру с помощью SpriteBatch ?
Аноним 25/04/23 Втр 23:51:39 876927 452
Хочу написать клон нойты на плюсах
какой движок мне выбрать? или придется все пилить с нуля, если с нуля то посоветуйте гайдов
Много раз тыкал OpenGL
но понимания как должна быть устроена вся система нету конечно
Аноним 26/04/23 Срд 00:35:19 876932 453
>>876927
>клон нойты на плюсах
>посоветуйте движок
Godot
Аноним 26/04/23 Срд 14:04:31 876975 454
Аноним 07/05/23 Вск 22:32:47 878085 455
Как указать размеры OrthographicCamera так, что-бы на всех андроид аппаратах картинка была одинакового размера ?
Аноним 08/05/23 Пнд 02:23:31 878090 456
>>878085
> Как указать размеры OrthographicCamera так, что-бы на всех андроид аппаратах картинка была одинакового размера ?
Проекция не зависит от размера, только от аспекта.
Аноним 03/07/23 Пнд 22:25:41 884155 457
image.png 258Кб, 809x643
809x643
image.png 152Кб, 803x626
803x626
Антоны, нид хелп.
Не понимаю что происходит.
Делаю туторы на лерн опенжл, остановился на трансформациях https://learnopengl.com/Getting-started/Transformations
Сделал эти трансформации, все работает, да только вот текстурные координаты по пизде пошли.
Даже если никаких трансформаций не делаю, т.е. передаю единичную матрицу - все равно хрень получается.
Как только убираю умножение трансформации на вершины (все остальное остается как есть), то картинка снова рисуется как я задумал.
В чем дело? В туторе об этом ничего не говорится, и в коде никаких дополнительных действий нет.
Код шейдеров https://pastebin.com/Qu4x5LaA
Пикчи прикрепил

UPD. Текстуры как будто меняются местами, сейчас проверил, при биндинге текстур поменял их местами - картинка стала "как надо". Почему так нахуй?
Аноним 04/07/23 Втр 00:10:19 884197 458
>>884155
Сделал еще тест.
Если написать в вертексном шейдере так
vec4 t = {0.1f, 0.1f, 0.1f, 0.f};
gl_Position = t + vec4(aPos, 1.0f);

то все заебись рисуется, просто со смещением.

Если же написать так
vec4 t = {0.1f, 0.1f, 0.1f, 0.f};
t
= transform;
gl_Position = vec4(aPos, 1.0f);*
(трансформация только к новому вектору применяется, а к позиции нет)
то происходит чепуха то ли с текстурами, то ли с текстурными координатами.

Какого гуя задействование униформы с трансформацией может влиять на текстуры/координаты?
Аноним 04/07/23 Втр 00:11:47 884198 459
>>884197
>t *= transform;
>gl_Position = vec4(aPos, 1.0f);
умножение на трансформ там проебалось.
Аноним 05/07/23 Срд 18:08:08 884442 460
>>884197
То есть, когда в gl_Position ты записываешь aPos без трансформации, изображение становится темным, как на второй картинке, или какая-то другая чепуха?
Аноним 05/07/23 Срд 20:27:48 884469 461
>>884442
Так, только наоборот, без трансформации светлая картинка (как я хочу), с трансформацией становится темная. Картинка со смайликом имеет черный фон, поэтому больше черного блендится в выходной пиксель.

Но на самом деле даже не обязательно в gl_Position использовать трансформацию - если я временный вектор создам и на нем применю трансформацию, а в gl_Position запишу просто aPos, будет внезапно темная картинка.
Или же если в самом шейдере создать матрицу трансформации, и ее умножить на aPos, а униформу нигде не использовать - тогда будет нормальная светлая картинка.

Моих знаний хватает только на то, чтобы предположить, что если в шейдере не используется transform переменная, то она оптимизируется и выкидывается компилятором. Но как само наличие этой переменной может влиять на текстуры - я допереть не могу.
Аноним 05/07/23 Срд 20:54:42 884475 462
>>884469
Билять, так и знал, что какая-то дебильная опечатка будет. Все буферы-хуюферы проверил, а шейдерные проги не проверил.
Короче, я униформы текстур задавал для одной проги, а униформу трансформации для другой.
Было типа так
>glUniform1i(glGetUniformLocation(textureShaderProgram.getID(), "ourTexture"), 0);
>glUniform1i(glGetUniformLocation(textureShaderProgram.getID(), "ourTexture2"), 1);
>glUniformMatrix4fv(glGetUniformLocation(transformShaderProgram.getID(), "transform"), 1, GL_FALSE, glm::value_ptr(trans));

Теперь все норм, всем спасибо.

Но как оно вообще рисовало хоть что-то, я все равно не допираю. Если для шейдера униформа не задана, не должна ли она рисовать пустоту или какой-то рандом? Или оно берет первые попавшиеся данные?
Аноним 05/07/23 Срд 21:04:11 884478 463
>>884469
Можешь полный код залить, и шейдерный, и основной?
Аноним 05/07/23 Срд 22:14:26 884490 464
>>884478
Да я уже нашел проблему, униформы текстур не были заданы по сути. Только каким-то чудом оно рисовало что-то.
Шейдеры как тут: https://pastebin.com/Qu4x5LaA
Основной говнокод такого рода: https://pastebin.com/bzhNB3ur
Немудрено в нем запутаться. Сейчас рефакторить стал, чтобы более-менее внятный пайплайн получить.
Аноним 06/07/23 Чтв 15:28:26 884562 465
>>710982
На самом деле ресурсы проще обернуть в shared_ptr он не будет копировать оригинал а просто увеличит счетчик, а при удалении вызовет деструктор который все почистит
Аноним 09/07/23 Вск 14:33:01 885215 466
image.png 1070Кб, 1200x675
1200x675
всем ку!
Хочу сделать как домашний проектик полную копию карты CK3
то есть отрендерить результат как на пике
Как добиться такого же результата?
Примерно понятно как отрисовывать heightmap
Но вот как делать текстуринг? Можно ли его делать процедурно с точно таким же результатом? (чтобы он получился таким же мультяшно няшным)
Как делать проекцию карты? (там не меркатор а что то другое)
Есть шейдер воды, но непонятно как его присобачить к карте
Аноним 09/07/23 Вск 15:19:34 885225 467
>>885215
Ты хочешь свой движочек писать, чтобы изучать опенгл, или тебе просто техники нужны, чтобы раскрашивать 3д?
Так-то с процедурной генерацией можно дохера всего замутить
https://www.youtube.com/watch?v=BFld4EBO2RE
Аноним 09/07/23 Вск 16:42:08 885235 468
>>885225
на данном этапе хочу просто повторить то что вкинул на пике
но может из этого потом и образуется чего нибудь
Аноним 09/07/23 Вск 17:25:41 885239 469
>>885235
Ну так вопрос на чем ты будешь делать и какие знания у тебя уже есть.
Судя по вопросам о проекции карты и шейдере воды, тебе еще многое предстоит узнать.
Скорее всего без базы по опенглу не обойтись.
Карту тебе так или иначе надо в какую-то текстуру нарисовать и эту текстуру уже отображать как хочешь.
Для воды у тебя будет один меш, его рисуешь одним шейдером, для карты у тебя будет другой меш, ее рисуешь другим шейдером.
Аноним 09/07/23 Вск 17:33:13 885242 470
>>885239
а как делать такой правдоподобный текстуринг? и чем сделан свет?
Аноним 09/07/23 Вск 20:17:22 885275 471
>>885242
Для правдоподобного текстуринга нужны правдоподобные текстуры.
Свет там по-моему самый обычный, по Фонгу.
В рендеринге нет 100% однозначных решений как сделать заебись, каждый выкручивается как может, отталкиваясь от базовых алгоритмов.
Аноним 09/07/23 Вск 21:00:18 885277 472
image.png 42Кб, 176x220
176x220
А в движкосраче треде сказали, что вулкан можно выучить за 2 месяца. Но что-то это напоминает известный мем.
Аноним 14/07/23 Птн 04:00:12 886201 473
Почитал the book of shaders, поигрался с шейдерами на shadertoy, прикольно, мне понравилось. Решил основательнее сесть за графику; открыл http://www.learnopengl.com/, а там всё на c++. А я не знаю c++. Зато немного знаю c#. Есть вариант делать графику на c#?
Аноним 14/07/23 Птн 10:45:07 886232 474
>>885277
Смотря что ты понимаешь под изучением. Если ты уже понимаешь что такое программирование и как должен работать рендер - тебе даже учить ничего не нужно, просто гуглишь конкретные функции вулкана, а потом читать статьи про оптимизацию рендер пайплайна.
Аноним 14/07/23 Птн 10:46:19 886233 475
>>886201
Пиши на си, там учить ничего не нужно и никаких классов нет. Из с++ просто копируешь все функции и делаешь свои структуры.
Аноним 15/07/23 Суб 00:33:51 886641 476
Обратить куб в мою сторону Аноним 17/07/23 Пнд 20:17:55 887310 477
изображение.png 1397Кб, 1400x800
1400x800
Здравствуйте, Аноны.
Как сделать так, чтобы объекты "смотрели" на определённую точку?
Это как, например, спрайты в DooM, но должно работать с объёмными мешами.
Аноним 17/07/23 Пнд 20:27:58 887315 478
изображение.png 6Кб, 340x298
340x298
>>887313
>2. Строишь тройку перпендикулярных векторов.
Чё за тройка? Я только 1 перпенд. вектор.
Аноним 17/07/23 Пнд 20:33:04 887316 479
Аноним 17/07/23 Пнд 20:37:25 887320 480
kidzonya.mp4 13356Кб, 576x1024, 00:00:40
576x1024
Создание тесселяцией уровней детализации Аноним 26/07/23 Срд 14:26:11 889727 481
изображение.png 542Кб, 961x517
961x517
Здрасьте, Мужчины.
Есть ли смысл в создании мешей методом тесселяции из текстур, хранящих вершины (то есть, например, берётся куб, и он превращается, условно, в машину) ?
Или лучше использовать другие методы создания уровней детализации?

Как я понял, это хорошо работает с ландшафтом, но можно ли такой метод использовать повсеместно?

https://www.rastergrid.com/blog/2010/10/gpu-based-dynamic-geometry-lod/
Аноним 26/07/23 Срд 20:51:25 889835 482
>>887315
Ты туп? От же по русски скпзал
> строишь тройку ...
Очевидно это что это сорт оф оси 3х мернвх коордига х у з.
Аноним 14/08/23 Пнд 16:06:06 894112 483
bump
Аноним 15/08/23 Втр 03:37:03 894199 484
>>889727
>Есть ли смысл в создании мешей методом тесселяции из текстур, хранящих вершины
Только если ты Майкрософт с миллионом докторов наук в штате, которые напишут рабочий алгоритм. Построить хайполи из лоуполи и текстуры бампа без артефактов для нетривиальной геометрии - очень нетривиальная задача. Тема для диссертации.
Аноним 15/08/23 Втр 14:06:37 894227 485
Стоит ли избегать лишних смен шейдерных программ? Аноним 28/08/23 Пнд 16:39:00 895641 486
1614860561028.png 503Кб, 640x640
640x640
Стоит ли избегать лишних вызовов смены шейдерных программ, или это не так уж и критично?
То есть: надо ли сортировать отрисовку мешей по шейдеру? И если надо, то как естесно я использую ECS ?
Аноним 29/08/23 Втр 12:46:31 895737 487
>>895641
>То есть: надо ли сортировать отрисовку мешей по шейдеру?
Конечно. У них же разные атрибуты, разные буфферы и данные.
>И если надо, то как естесно я использую ECS ?
Смотря что за ecs у тебя и как происходит рендер. Просто делаешь разные рендер-компоненты под каждый шейдер, хуле тут особо думать. Системы сначала разобрались с одними компонентами и отправили на видяху одни данные в шейдер, потом проходят другие системы от другого шейдера.
Аноним 01/09/23 Птн 07:23:18 896086 488
image.png 216Кб, 2550x1374
2550x1374
image.png 16Кб, 643x198
643x198
Цвета шахматки генерятся в шейдере. Есть ли какой-нибудь способ убрать этот ебучий шум и сделать заебись как при текстурной анизотропии?
Аноним 01/09/23 Птн 12:26:56 896100 489
изображение.png 131Кб, 1562x167
1562x167
>>896086
>Есть ли какой-нибудь способ
Чего бухтеть-то? Надо реализовать эту фильтрацию в шейдере, взяв ваш текущий выходной цвет фрагмента в качестве входных данных функции фильтрации.
Чекни эту ссылку:
https://habr.com/ru/articles/331618/

Это я про обработку полигонов.
Если у тебя рендеринг излучением (ray marching, ray tracing, ray casting), то решение твоей проблемы можно запросто найти в ру ютубе: https://youtu.be/H-RCv-bbfa8?si=XjpIs6s8tmmOywOH
Аноним 01/09/23 Птн 14:18:21 896115 490
image.png 984Кб, 2019x1118
2019x1118
>>896100
Там такая же залупа с искажениями. Нужна функция от dot(view, norm), с сглаживанием для углов близких к 90. Только хуй его знает что сглаживать.
Аноним 01/09/23 Птн 20:23:25 896151 491
93aT3q1GkF4.jpg 126Кб, 1080x922
1080x922
>>896115
Ну тогда мужайся самостоятельно, чел. Я так-то сам не гуру графического программирования.

Если у тебя неполигональная графика, то полазь на https://www.shadertoy.com/ и поищи там шейдеры по запросам"ray marching" и "ray tracing". Также про эти темы есть много как обычной инфы, так и уроков в виде статей и ютуба.
Иначе просто реализуй анизотроп. фильтрацию в шейдере или включи это какой-то командой OGL/Vulkan (в ogl оно вроде расширением включается, а в vk наверно есть изначально), и почитай спойлер ниже.

Попробуй шахматное поле сохранить в текстуре, к которой потом применишь анизотропную фильтрацию.

>dot(view, norm), с сглаживанием для углов близких к 90
Скалярное произведение единичных векторов равно косинусу. Косинус углов, близких к 90, приближается к нулю. Может ли точность этого произведения так заметно влиять на качество?


А лучше прислушиваться ко мне в последнюю очередь.
Аноним 01/09/23 Птн 21:16:13 896157 492
>>896115
Так там нихуя не делали сглаживание. Там только уход в горизонт сделали. Если внимательно присмотришься на 1080р, там зазубрины повсюду.
Единственный варик избавляться от сортов алиасинга - это сорта анти-алиасинга.
Такшо, по сути цвета и надо сглаживать. В простейшем виде просто блюр делать, блюр съедает детали, поэтому лишнего говняка не появляется.
Аноним 04/09/23 Пнд 19:19:10 896471 493
1691764443341.png 104Кб, 637x637
637x637
>>896086
Туман или подобное
Аноним 09/09/23 Суб 02:43:18 896878 494
ХОЧУ СТАТЬ УВАЖАЕМЫМ ЧЕЛОВЕКОМ В МИРЕ КОМПЬЮТЕРНОЙ ГРАФИКИ
Знаю как вычислить определитель, что такое линейная зависимость и базис.
Какие умные книжки читать?

Перенес из /math/, там мне ответили дефолтное «не математика»
Аноним 09/09/23 Суб 02:52:31 896881 495
41EuRrF49AL.ACU[...].jpg 35Кб, 730x1000
730x1000
Ладно, и без вас разобрался.
Ждите нового Кармака!
Аноним 09/09/23 Суб 09:08:35 896890 496
>>896878
>>896881
да нахуй оно тебе надо
косинусы, синусы знаешь, квартенионы понимаешь? ну и готов значит
Аноним 09/09/23 Суб 10:02:38 896897 497
>>896890
> квартенионы понимаешь
Нет, вообще не знаю, что это такое.
Аноним 09/09/23 Суб 10:24:40 896899 498
>>896890
К чему готов? Если я в резюме напишу, что знаю синусы, косинусы и кватернионы, на работу возьмут движкописей?
Аноним 09/09/23 Суб 10:39:22 896903 499
>>896899
А ты что, решил в резуме расписывать все свои математические знания?

Ну или кто то на собесе жеско линал спрашивает?
Аноним 09/09/23 Суб 11:07:43 896908 500
>>896903
А что тогда спрашивают?
Аноним 09/09/23 Суб 11:17:08 896910 501
>>896908
Про плюсы, про графику саму, алгосы
Аноним 09/09/23 Суб 14:20:34 896937 502
164376090060.png 648Кб, 720x720
720x720
>>896908
Алгоритмы, навыки управления ГП и ЦП, умения использовать математику, компуктер сайнс, обычные вопросы по программированию.
Аноним 09/09/23 Суб 16:43:56 896956 503
>>896910
>>896937
То есть прочитав только сайт learnopengl, никуда устроиться не получится?
Аноним 09/09/23 Суб 17:16:33 896973 504
>>896956
Только прочитав точно не устроишься
А вот если еще что то путное напишешь, хотя бы простой рендер движок, то уже хоть куда то
Аноним 09/09/23 Суб 19:48:44 896995 505
>>896973
Простой рендер движок - это куб вращающийся? Или какой минимальный функционал у него должен быть?
Аноним 09/09/23 Суб 21:02:27 896998 506
>>896995
Чем больше - тем лучше.
Ты же понимаешь, что потенциально конкурировать будешь с задротами, которые уже в 3 года написали реалтаймовый рейтрейсер с нуля?
Представь приходишь ты к челам, говоришь "я могу накодить графику", тебе говорят "покажи". И показываешь два треугольника. Принял бы ты сам себя на работу на их месте? Офк, прежде всего это от запросов компании зависит.
Если ты на нуба графики идешь, скорее от тебя будут ждать, что ты расскажешь как весь этот рендер работает, ну и желательно подкрепишь на деле свои слова. Если на кого-то постарше, то скорее спросят за реализованные проекты и что ты в них делал.
На хабре было пару статеек про собесы на графиста, там вопросики есть.
мимо
Аноним 11/09/23 Пнд 23:50:03 897264 507
Подскажите какой сейчас самый модный алгоритм для сглаживания шедоумапов? Знаю pcf и variance, но это было уже лет 10 назад. Что сейчас юзают в попсовых движках типа анрила?
Аноним 12/09/23 Втр 16:38:22 897349 508
изображение.png 123Кб, 1026x587
1026x587
>>897264
Первое, что нашёл:
https://developer.nvidia.com/gpugems/gpugems/part-ii-lighting-and-shadows/chapter-11-shadow-map-antialiasing
https://www.comp.nus.edu.sg/~tants/tsm/tsm.pdf
https://docs.unrealengine.com/5.0/en-US/virtual-shadow-maps-in-unreal-engine/

В пятом анриле, как я только что узнал, для карт теней используется виртуальная текстура (в движках Джона Кармака чуть расширенная версия этого звалась мегатекстурой) теней.

https://ru.wikipedia.org/wiki/Clipmapping
https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%B3%D0%B0%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%83%D1%80%D0%B0
Аноним 23/09/23 Суб 16:05:06 902680 509
image.png 937Кб, 2545x1378
2545x1378
>>897349
Это хуйня придумана укропами нужна для оптимизации. Закулить непопадающие в фрустум камеры тайлы у спарсед шадоумапы. Я спрашивал про сглаживание. В принципе vsm все еще топчик по качество\перф.
Аноним 08/10/23 Вск 15:21:53 905752 510
>>902680
Что за тулза такая на скрине?
Аноним 15/10/23 Вск 11:36:20 907673 511
Перевод на ravesli.com уроков с learnopengl нормального качества, проверял кто? Вроде даже все уроки переведены, кроме самых новых
Аноним 15/10/23 Вск 15:54:17 907726 512
>>907673
Хз, посмотри пару уроков и оцени. Если там будет какая-нибудь хуйня вроде точечных продуктов dot product, то дроп сразу.
Вообще на хабре был перевод, возможно там под присмотром народа лучше отредачено.
А так, я бы советовал сразу к англюсику привыкать, ибо половина терминов все равно заморские и не переводятся нормально.
Аноним 15/10/23 Вск 16:21:44 907735 513
Ответить в тред Ответить в тред

Check this out!

Настройки X
Ответить в тред X
15000
Добавить файл/ctrl-v
Стикеры X
Избранное / Топ тредов