Этого треда уже нет.
Это копия, сохраненная 31 июля 2021 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
.png95 Кб, 1296x758
OpenGL thread 6 550538 В конец треда | Веб
Рисуй треугольник!
Треугольник сам себя не нарисует!

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

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

Шапка треда:
https://gist.github.com/2ch-gd-opengl/26b94fc6f16100af730d84a3d8bbd557
2 551141
>>550538 (OP)
Посаны, как на opengl рисовать прозрачные окошки с гасуссовым размытием фона под ними?
3 551185
>>551141

Поверх десктопа - никак, только через шиндовсапи. На питухос/пидорос свои заморочки с иксами и композитором.

Если ты про внутриигровые - то ставишь режим блендинга, натягиваешь полупрозрачную текстуру на квад и рендеришь в порядке z-ordera твоих окошек.
4 551220
>>551185
Внутриигровые. С полупрозрачными понятно, а может ли шейдер считывать из текущего fb уже выведенные пиксели, причем не строго в той же позиции, но и соседние?
5 551328
Возможно ли в шейдере прочитать из интеджер текстуры(TBO) например флоат. Ну то-есть прочитать сырые байты как другой тип. В Си я бы просто сделал так ((int*)floatArr)[10]. Хочу засунуть в одну текстуру много разных структур и читать их из разных шейдеров, SSBO не подойдёт, так как нельзя дать смещение.
6 551333
>>551328
Без каста - никак.
7 551344
>>551333
Вроде нашёл функции: floatBitsToInt, intBitsToFloat. Будем-с изучать.
8 551438
Какого хуя glBindBufferRange не работает c GL_ARRAY_BUFFER?
Я хочу засунуть вершины, индексы, юниформы и вообще всё говно в один буффер, как в вулкане.
9 551439
>>551438
Блядь ступил, При вызове дроу оффсет задается.
10 551445
Кстати вот еще вопрос есть ли смысл в OGLе выделить один vbo для всего и распределять память в нем вручную? Одни говорят стоит, потому что смена vbo это дорого, другие говорят не еби мозг, выделяй кусками сколько хочешь, все равно этим занимается драйвер на хост сайде. Кому верить?
11 551521
>>551445
Нет какого-то универсально ответа\решения.
Это как и в других вещах.
12 551771
>>551445
Стрельба по воробьям из танка. Если так хочется ебаться с памятью - юзай вулкан или dx12. OGL суть понятный и простой.
13 552098
glGet* функции дешевые? Ну драйвер не лезет далеко, чтобы узнать например какой текстурный юнит или буффер сейчас забинден? Логика мне подсказывает что это хранится где-то в юзермоде на хосте и тормозить не должно.
Блядь эти хождения по граблям на ощупь подзаебали. Уже паранойа от того что что-то не так сделаешь и фрейм рейт дропнется к хуям.
14 552106
>>552098

> Ну драйвер не лезет далеко, чтобы узнать например какой текстурный юнит или буффер сейчас забинден?



Скорее всего нет и лучше делать какие-то свои обёртки над этим.
https://github.com/id-Software/DOOM-3-BFG/blob/1caba1979589971b5ed44e315d9ead30b278d8b4/neo/renderer/tr_local.h#L612
15 555636
Есть ли исходники оригинального fxaa? Не то мыльное говно на гитхабах из гугла, а именно реализация как в дровах нвидии?
16 557838
>>555636
FXAA в любом случае мыльное говно.
17 557841
>>551185

>питухос свои заморочки с иксами


Не помню, чтобы у винды иксы были.
19 558322
>>551445

Чтобы эта шарманка полностью работала нужны SSBO, glMultiDrawXXXXXXIndirect, glDrawID и texture array, то бишь версия не ниже 4.5. И еще шейдер сабрутины если ты вообще хочешь рендерить все материалы в одном батче.

Фактически же всё зависит от input layout, который в реальных проектах разный для разных типов геометрии - где то есть скелетка, где то морф таргеты, где -то просто статическая геометрия. Всё упихать в один батч не получится один хуй.

Это раз.

Второе - пердолить отдельные униформы быстрее чем мапить и заливать UBO/SSBO и тут ещё вопрос где ты отсосёшь больше.

>>551220

>Внутриигровые. С полупрозрачными понятно, а может ли шейдер считывать из текущего fb уже выведенные пиксели, причем не строго в той же позиции, но и соседние?



Из fb не может, придется пердолить SSBO.

В описании расширения где-то в конце есть пример кода:

https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_shader_storage_buffer_object.txt
20 558454
Если я передаю из шейдера дальше в шейдер in out переменные взаимоисключающими блоками(если передал a,b не передаю c,d и наоборот), то имеет ли смысл делать общие переменные(ac, bd), или всё же если я в конце не проинициализирую один блок, gpu и небудет его пересылать? Блоки большие и их много.
21 558459
>>558454
Лучше юзай uniform buffer object
22 558465
>>558459
Uniform`ы ж для передачи с cpu, а уменя верт. шейдер рождает переменные и передаёт в пикс. шейдер. Просто как я понимаю in out переменные предаются по какой-то быстрой памяти между шейдерами, в отличии от общей памяти.
23 558467
>>558465

> между шейдерами


Нихрена не понял.
Твои шейдеры (вершинный и фрагментный) компилируются в одну программу, грубо говоря.
Между ними ничего не передаются, переменные по крайней мере uniform как бы общие.
Ну а если у тебя этих шейдеров много и чтобы для каждого тебе не устанавливать свои значения, ты можешь в начале кадра uniform block заполнить нужными данными и всё.

По поводу in/out лучше почитать в сторонней литературе, а не гадать как оно там.
24 558471
>>558467
Есть ссылки на почитать про inout, что-то не нахожу.
У меня один убершейдер, в котом case`ы разделяют логику(типо маленькие подшейдеры), соответственно эти подшейдеры пересылают дальше свои перменные, то-есть никогда не пересылаются все сразу пременные из всех подшейдеров.
Кстати если всё объединется в одну программу, у неё есть предельный размер?
25 558473
>>558471

> Кстати если всё объединется в одну программу, у неё есть предельный размер?


Ты это о чём?
Почитай в книжках что такое шейдер.

> Есть ссылки на почитать про inout, что-то не нахожу.


Зайди в гугол и введи "glsl in out parameter"
26 558474
>>558473
Я имею ввиду если я накатаю шейдер длинной с "Войну и мир", он скомпилится?
27 558475
>>558474
Да, но так лучше не делать.
Ветвления и циклы, ну по крайней мере раньше говорили, это не очень хорошо для шейдера.
Плюс, также, от версии драйвера может зависить и от карточки. Вроде ограничений на количество переменных и тп
28 558477
>>558475
Ясно. Просто пытаюсь написать один шейдер на все случаи.
29 558480
>>558477
Зачем? Запутаешься и потом не поймёшь где чего.
30 558483
>>558480
Так у меня всё по отдельным файлам как обычно, потом просто пред компиляцией в один текст соединяю.
31 558542
>>558477
>>558474
>>558471

>Есть ссылки на почитать про inout, что-то не нахожу.


>У меня один убершейдер, в котом case`ы разделяют логику(типо маленькие подшейдеры), соответственно эти подшейдеры пересылают дальше свои перменные, то-есть никогда не пересылаются все сразу пременные из всех подшейдеров.



Если ты и решил упарывать убершейдер, то делай это правильно:

https://www.khronos.org/opengl/wiki/Shader_Subroutine
33 558551
>>558548
И в догонку. Стоит ли ориентироваться на OGL 4.6? Там полезные gl_BaseVertex и gl_BaseInstance. Но он мало ещё распространён или?
34 558574
>>558551
GTX 500+ за исключением некоторых младших карточек, у амд из тех же годов примерно. Если ты делаешь что-то с графоном выше уровня /gd/ - у тебя один хуй в минималках карты новее будут. Для чего-то проще я бы остался на 3.3.
35 558698
Почему сайт khronos.org практически никогда не открывается? Это только у меня так или у всех? Я блять уже в роутере DNS разные ставил, вручную вводил ip 104.236.24.254 в hosts файл, нифига не помогает. Подобные сайты https://isitdown.site/khronos.org показывают, что страница онлайн. Я не могу понять в чем проблема.
36 558709
>>558698
У меня сразу открылся.
1550679581894.png13 Кб, 438x550
37 558771
Как блендингом сделать такое пересечение двух альф?

>>558698
У меня через гугл кеш открывается, но грузится около двух минут.
38 558860
>>558771
Да я тоже гугл кэшом пользуюсь. Значит не только у меня проблема с этим сайтом?
39 558874
>>558771
гугли трансперанси пасс
40 560043
Объясните зачем нужен deferred шейдинг? Разве форварде я не могу сразу передать все источники света в фрагментный шейдер и в цикле за один проход все посчитать?
41 560045
>>560043
o v e r d r a w
v
e
r
d
r
a
w
42 560071
>>560043
Можешь. А теперь попробуй посчитать так сотню источников света на тысяче объектов.
43 560302
>>560045
Депф пре пасс не может в таком случае, или зачем он нужен?
44 560374
>>557838
Дефолтный FXAA реализованный в последних дровах nvidia очень качественный практически не мылит в отличие от например от того что есть в открытом доступе https://gist.github.com/kosua20/0c506b81b3812ac900048059d2383126
Вот жеж жадные ублюдки, могли бы и поделиться.
45 560405
>>560302
фикс: не поможет
kartinko.png111 Кб, 739x395
46 561233
Написал шейдер для наложения текстуры из ssbo(да, я извращаюсь). Вопрос: нормально ли, что текстура в формате R8bit пикселизирована больше чем R32bit, а не просто цвета беднее. Или я где-то с алгоритмом наплошал?
47 561371
>>561233
Ну ты явно где-то с сэмплингом обосрался. Выложи шейдерный код.
48 561378
>>561371
Просто интерполирую между четырьмя пикселями
tw, th --ширина\высота текстуры
//Вертекс.ш.-----------
coor= vec2(
texcoor.x tw (1- 1f/tw), //(1- 1f/tw)-- stretch to extrude artifacts
texcoor.y th (1- 1f/th)
);

//Фраг.ш.-----------
float u= coor.x,
v= coor.y;
uint x= uint(u),
y= uint(v);
float fx= fract(u),
fy= fract(v);

outcol=
gtex_r8(tex, x, y, tw) ((1-fx) (1-fy))
+gtex_r8(tex, x+1, y , tw) (( fx) (1-fy))
+gtex_r8(tex, x+1, y+1, tw) (( fx) ( fy))
+gtex_r8(tex, x , y+1, tw) ((1-fx) ( fy));

//------------
vec4 gtex_r8(uint tex, uint x, uint y, uint w)
{
uint o= x/4 +y/4w,
f= x%4,
m= 255 <<(f
8);
float col= float((ussbo[ tex +o ] &m) >>(f*8)) /255;
return vec4(col,col,col,1);
}
48 561378
>>561371
Просто интерполирую между четырьмя пикселями
tw, th --ширина\высота текстуры
//Вертекс.ш.-----------
coor= vec2(
texcoor.x tw (1- 1f/tw), //(1- 1f/tw)-- stretch to extrude artifacts
texcoor.y th (1- 1f/th)
);

//Фраг.ш.-----------
float u= coor.x,
v= coor.y;
uint x= uint(u),
y= uint(v);
float fx= fract(u),
fy= fract(v);

outcol=
gtex_r8(tex, x, y, tw) ((1-fx) (1-fy))
+gtex_r8(tex, x+1, y , tw) (( fx) (1-fy))
+gtex_r8(tex, x+1, y+1, tw) (( fx) ( fy))
+gtex_r8(tex, x , y+1, tw) ((1-fx) ( fy));

//------------
vec4 gtex_r8(uint tex, uint x, uint y, uint w)
{
uint o= x/4 +y/4w,
f= x%4,
m= 255 <<(f
8);
float col= float((ussbo[ tex +o ] &m) >>(f*8)) /255;
return vec4(col,col,col,1);
}
49 561379
>>561378
Ну ё-моё уможения "отклеились".
50 561380
>>561379
Ж-звезда
//Вертекс.ш.-----------
coor= vec2(
texcoor.x Ж tw Ж (1- 1f/tw), //(1- 1f/tw)-- stretch to extrude artifacts
texcoor.y Ж th Ж (1- 1f/th)
);

//Фраг.ш.-----------
float u= coor.x,
v= coor.y;
uint x= uint(u),
y= uint(v);
float fx= fract(u),
fy= fract(v);

outcol=
gtex_r8(tex, x, y, tw) Ж((1-fx) Ж(1-fy))
+gtex_r8(tex, x+1, y , tw) Ж(( fx) Ж(1-fy))
+gtex_r8(tex, x+1, y+1, tw) Ж(( fx) Ж( fy))
+gtex_r8(tex, x , y+1, tw) Ж((1-fx) Ж( fy));

//------------
vec4 gtex_r8(uint tex, uint x, uint y, uint w)
{
uint o= x/4 +y/4Жw,
f= x%4,
m= 255 <<(fЖ8);
float col= float((ussbo[ tex +o ] &m) >>(fЖ8)) /255;
return vec4(col,col,col,1);
}
50 561380
>>561379
Ж-звезда
//Вертекс.ш.-----------
coor= vec2(
texcoor.x Ж tw Ж (1- 1f/tw), //(1- 1f/tw)-- stretch to extrude artifacts
texcoor.y Ж th Ж (1- 1f/th)
);

//Фраг.ш.-----------
float u= coor.x,
v= coor.y;
uint x= uint(u),
y= uint(v);
float fx= fract(u),
fy= fract(v);

outcol=
gtex_r8(tex, x, y, tw) Ж((1-fx) Ж(1-fy))
+gtex_r8(tex, x+1, y , tw) Ж(( fx) Ж(1-fy))
+gtex_r8(tex, x+1, y+1, tw) Ж(( fx) Ж( fy))
+gtex_r8(tex, x , y+1, tw) Ж((1-fx) Ж( fy));

//------------
vec4 gtex_r8(uint tex, uint x, uint y, uint w)
{
uint o= x/4 +y/4Жw,
f= x%4,
m= 255 <<(fЖ8);
float col= float((ussbo[ tex +o ] &m) >>(fЖ8)) /255;
return vec4(col,col,col,1);
}
51 561381
>>561379
Выложи на https://pastebin.com/ там даже подстветку для языка можешь выбрать (OpenGL Shading)
52 561382
>>561380
Функци конвертации из BGRA32 в R8
INLINE void convcol_r8(byte d, int wh, byte e)
{
loop(wh)
e= (d[i4+0] + d[i4+1] + d[i*4+2]) /3;
}
54 561436
>>561386
Что за фигня в функции convcol_r8(), это вообще какой ЯП? Обозначай параметры и переменные яснее. Ты вот если откроешь свой код через год, ты сам уже забудешь, что они значат. Я так понимаю d это инпут, e аутпут, wh количество пикселей? А что за loop() еще за хуйня? И ты уверен что у тебя текстура находится в формате BGRA32? То есть каждый канал по 32 бит и все вместе 128 бит (16 байт)? Насколько я понял, ты хочешь конвертировать цветную (или многоканальную чернобелую) текстру в однуканальную чернобелую, правильно? Хз что у тебя за язык и цикл такой, но в C++ я бы написал так https://pastebin.com/vbWfTMTK
55 561445
>>561436
Пардон я тупанул, это же интегеры а не флоаты, тогда надо еще будет разделить на 4294967295 и умножить на 255;
56 561669
>>561587
Я сейчас побуду луддитом, но побитовые операции в GLSL впизду. Жопа помнит, как эта хуйня выдавала диаметрально противоположные результаты от карты к карте.
57 561710
>>561587
Можно и биты попинать, но тогда нужно просто >> 24. А то что ты показал выйдет 0.
58 562586
Есть ли какие-то алгоритмы для бесплатного 2D рендера с разными материалами(шейдеры/текстуры)?
Есть желание рисовать спрайты с минимальным расходом сил процессора и видюхи.
Пока как-то логично выглядит только батчинг, но количество телодвижений не окупает результат.
Есть ли бумажка, которую можно почитать по этому вопросу?
59 562617
>>562586
Ты можешь сейчас рисовать сотни тысяч треугольников вообще без какой-то просадки.
Если навыков и ума хватает, то в основном тебе надо то что исполняется на процессоре оптимизировать
60 562621
>>562617

>сотни тысяч


Имеешь в виду инстансинг?
61 562628
>>562621
Это и AZDO.
62 562629
>>562621
Я вообще говорю.
63 562740
Что делает glPrimitiveRestartIndex? Прочитал - нихуя не понял. Кто нибудь может объяснить нормально?
64 562747
Что делать если компилятор не видит glGetTextureHandleARB()?
GLFW 3.2.1 должен ведь сам дать указатели на все все функции?
65 562751
>>562747
Разве это не дело glad или glew? GLFW же только обёртывает виндовскую API.
66 562753
>>562751
Да спасибо, просто обновил.
67 562787
Как правильно писать в ssbo из шейдера? Допустим в вертекс шейдере делаю ssbo += 0.5f, вроде как эта переменная должна постоянно расти, а выходит будто создаётся локальная копия ssbo и к ней добавляется 0.5f, а настоящая остаётся неизменной. Пишут, что надо ставить барьеры; есть ли пример простой записи в ssbo?
68 563290
что делать с ебучими ворнингами вроде
warning C4267: 'argument': conversion from 'size_t' to 'GLuint', possible loss of data
компилируя под win64?
69 563304
>>563290
Юзай вместо GLuint просто unsigned int
Вроде size_t на x64 это не тоже самое что и на x86
70 563305
>>563304
Да я в курсе этого зоопарка лп ллп. Нагородили костылей. Я спрашиваю что луше - выключить сообщение нахуй или понаставить принудительных кастов?
71 563309
>>563305

> понаставить принудительных кастов?


Вот это лучше
72 563511
>>550538 (OP)
извините не подскажете игровой движок на OpenGL ??
Я конечно знаю есть leadwerks и OGRE, но есть ли ещё какие нибудь. Для игродела одиночки. Вопрост денег в принципе имеет значение но желательно не более 10 000 руб
(Знаю что есть UNIGINE но он также и виндовый Икс использует)
73 563602
>>563511
И Unity, и UnrealEngine могут в OpenGL. Я тебе советую не парится над графическими API, если ты действительно хочешь делать игры, а юзать один из стульев выше. В этом треде мы играемся с треугольниками и другими приколюхами, а не делаем игры.
74 564037
>>560043
для этого есть Forward+ и Clustered Forward. Первый используется в Quake Champions, второй в DOOM и вообще они тащат.

Суть класерного рендера в том, что у тебя View Frustum разбивается на сетку из MxNxK сегментов (в думе вроде 16х8х24), потом берется список из ВСЕХ источников света и проситывается, какие из них влияют на отдельные кластеры, и если они как-то влияют, их записывают в этот кластер (в кластерах также хранится информация о декалях и кубмапах). В думе лимит вроде 256 источников света. Кластеры хранят эти данные и их количество. Все это добро упаковывается в SSBO/UBO/текстуры и передается в каждый шейдер. В шейдере считается для каждого пикселя, в каком он находится кластере. Берутся данные из этого кластера и все расчитывается, как подобает. В этом подходе есть преимущества, что нет оверхеда на шину от деферред подхода, при этом если какой-то объект (или кусок объекта) ничего не освещает, в нем не произойдет никаких вычислений. Расчеты самой кластерной сетки и упаковывание в них информации можно отдать Compute Shader (дум вроде так и делает).

Forward+ Rendering сильно схож с кластерным, только там не 3д-сетка по фрустуму, а 2д-сетка в экранном пространстве (каждая ячейка имеет размер например 16х16 пикселей). Точно так же расчитывается для каждой ячейки список источников света (это тоже можно скормить в вычислительные шейдеры), примерно так же происходят расчеты в шейдере (определяется, в какой ячейке лежит пиксель, пробегается по всем источникам света и расчитывает свет. Если источников нет - свет не считается).

Как итог, такие системы рендеринга просты, работают везде, нетребовательны, дают высокую производительность с отсутствием оверхеда и практически неограниченное количество источников света в кадре.

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

В своем движке хочу внедрить кластерный рендеринг, но пока что-то времени не хватает и руки не доходят. В данный момент у меня тупо и криво сделанный форвард с лимитом в 4 источника света на объект.
74 564037
>>560043
для этого есть Forward+ и Clustered Forward. Первый используется в Quake Champions, второй в DOOM и вообще они тащат.

Суть класерного рендера в том, что у тебя View Frustum разбивается на сетку из MxNxK сегментов (в думе вроде 16х8х24), потом берется список из ВСЕХ источников света и проситывается, какие из них влияют на отдельные кластеры, и если они как-то влияют, их записывают в этот кластер (в кластерах также хранится информация о декалях и кубмапах). В думе лимит вроде 256 источников света. Кластеры хранят эти данные и их количество. Все это добро упаковывается в SSBO/UBO/текстуры и передается в каждый шейдер. В шейдере считается для каждого пикселя, в каком он находится кластере. Берутся данные из этого кластера и все расчитывается, как подобает. В этом подходе есть преимущества, что нет оверхеда на шину от деферред подхода, при этом если какой-то объект (или кусок объекта) ничего не освещает, в нем не произойдет никаких вычислений. Расчеты самой кластерной сетки и упаковывание в них информации можно отдать Compute Shader (дум вроде так и делает).

Forward+ Rendering сильно схож с кластерным, только там не 3д-сетка по фрустуму, а 2д-сетка в экранном пространстве (каждая ячейка имеет размер например 16х16 пикселей). Точно так же расчитывается для каждой ячейки список источников света (это тоже можно скормить в вычислительные шейдеры), примерно так же происходят расчеты в шейдере (определяется, в какой ячейке лежит пиксель, пробегается по всем источникам света и расчитывает свет. Если источников нет - свет не считается).

Как итог, такие системы рендеринга просты, работают везде, нетребовательны, дают высокую производительность с отсутствием оверхеда и практически неограниченное количество источников света в кадре.

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

В своем движке хочу внедрить кластерный рендеринг, но пока что-то времени не хватает и руки не доходят. В данный момент у меня тупо и криво сделанный форвард с лимитом в 4 источника света на объект.
75 564040
А еще в кластерном или форвард+ рендеринге можно делать нормальное освещение частиц, как DOOM и делает. Каждая частица разбивается на некоторое количество "пикселей", которое зависит от расстояния: 32x32 вблизи, 16x16, 8x8 и т.д. на больших дистанциях, а вычислительный шейдер, используя данные из кластеров, составляет атлас из карт освещения для частиц (в этом статическом разрешении), которая смешивается с цветом самой частицы и получается красиво.
Они так сделали, потому что повершинное освещение оказалось слишком грубым для больших частиц, если использовать повершинное освещение с тесселяцией, выходит большое количество вершин, а если считать попиксельно, выходит большая нагрузка (частицы прозрачные, как никак), поэтому сделали такую уловку.
76 564046
>>563511
Есть же Godot Engine, Unreal Engine, Unity. Они все умеют в OGL (Godot вроде ни во что другое не умеет).
77 564111
Ебать, у меня glGenVertexArrays занимает ~15 миллисекунд. Почему это может происходить?
78 564130
>>564111
Ебать, помог swap interval 1 если что. Все забивалось нахуй.
79 564148
>>564037
Интересно ты кто такой вообще?
80 564376
Ананасы, такой вопрос.
Как в 3д редакторах рисуют кисятми как в фш по поверхности? Например, делают делают каменную дорожку по траве.
Как это потом сохраняется для последующей отрисовки в игре?
К примеру https://www.youtube.com/watch?v=9xfnJn80DEU
81 564387
>>564376
splatmap
83 564449
>>564443
>>564387
Спасибо, братишки!
84 564706
Что лучше - апдейтить убо по кусочкам (речь идет о mvp матрицах, lightpos и т.д. небольшой объем, короче) или держать копию в оперативке, апдейтить ее и загонять в видеопамять сразу всю? Некоторые переменные не изменяются между кадрами.
85 564738
>>564706

>держать копию в оперативке, апдейтить ее и загонять в видеопамять сразу всю? Некоторые переменные не изменяются между кадрами


Если чо, это есть в ванильном огл.
https://www.khronos.org/opengl/wiki/Buffer_Object#Mapping
https://www.khronos.org/opengl/wiki/Buffer_Object_Streaming
86 564743
>>564706
А как сразу?
87 564746
Нужно ли делать отдельные шейдеры для моделей без света, анимации и т.д, или писать условия в одном шейдере? Это влияет на производительность моего персонального компьютера в расчетах графики, или условия не требовательны?
111.png1 Кб, 550x197
88 564755
>>564738
>>564743
Есть буфер с данными. Красным выделены участки которые обновились. Есть два варианта: 1 Через BufferSubData\MapBuffer обновлять каждый участок сразу в видеопамяти по отдельности. 2 Держать буфер в оперативе, там обновлять его, и одним вызовом BufferData отправлять в видеопамять. В первом случае много api вызовов. Во втором один, но копировать сразу весь буфер.
89 565014
Скажите, в этом треде только опенглщики сидят? Или есть люди, которые и в DirectX разбираются?
90 565079
>>565014
Смотри, тут такая тема: новички, обычно, начинают с OGL - поэтому тут этот тред и есть. А если знаешь OGL - то в остальном сможешь разобраться своими силами, были бы доки. Если ты хочешь вкатываться с D3D - ты явно где-то не там повернул.
91 568125
По идее если установить количество вершин в патче в tess control шейдере, например, layout (vertices = 4) out; то вызывать glPatchParameteri(GL_PATCH_VERTICES, 4); вроде бы не нужно. Но на практике не работает, приходится менять рендер стейт все равно. Или я что-то упускаю?
92 568969
>>565079
я наоборот считаю, что лучше начинать вкатываться с D3D (желательно 11), он дает более общее представление о графике, как мне кажется. Потом плавно переходить на D3D12/Vulkan, а OpenGL изучить разве что для ознакомления с историей. OpenGL пусть и хорош, но уже стар, и ему пора на заслуженный покой.
93 569382
>>550538 (OP)
я только начал изучать OpenGL, и мне непонятен один вопрос. Допустим мы загружаем 3d модель в формате .obj с файлом .mtl в программу. 3d модель состоит из нескольких мешей с разными материалами, например на часть модели наложены текстуры, а цвет другой части модели задан просто вектором цвета. Вся эта модель, которая состоит из нескольких мешей с разными типами текстур отрисовывается с помощью разных шейдеров для разных мешей? Или же вся модель отрисовывается с помощью одного вершинного и одного фрагментного шейдера для всей модели? Я только начал знакомиться с OpenGL, поэтому объясните пожалуйста этот момент.
94 569430
Как запекаются статические лайтмапы? Есть какой нибудь туториал с объяснением алгоритма как формируются uv развертки для геометрии?
95 569433
>>569382
Поставь анрил енжин, скачай демо проект и посмотри как модели устроены.
96 569435
>>569382

>на часть модели наложены текстуры, а цвет другой части модели задан просто вектором цвета


Не знаю как "принято", но такое вполне можно нарисовать одной парой шейдеров в один draw call.
Засунуть вектора цвета и текстурные координаты в один vbo типа vec3, так что у текстурных координат 3-ья компонента равна например -1.0f. И потом во фрагментном шейдере в зависимости от её значения или использовать тот vec3 напрямую, или делать lookup в текстуру по его первым двум компонентам.
97 569546
Как сделать освещение сцены, будто солнце светит сквозь листву?
98 569547
>>569546
Так и делай, свети, вставай под листья и зырь на солнце, будет похоже.
99 569548
>>569547
И будут пятнистые тени на объектах сцены?
100 569550
>>569548
Естественно.
101 569555
>>569430
Можешь посмотреть исходники утилит для первого Квейка
https://github.com/id-Software/Quake-Tools/tree/master/qutils/LIGHT

Или гугли q3map2 это комплиятор карт для Квейка 3. Он и лайтмапы создаёт тоже.
102 574914
Какая последовательность действий для удаления замапленного VAO. Мне вообще надо увеличить размер прежнего , но сперва понять бы как его полностью пересоздать?
103 575062
>>574914
Ты наверное vbo и vao путаешь?
104 575063
>>574914
Чего блядь? В OpenGL термины "замапленный" и "VAO" друг с другом не связаны. Если тебе нужно удалить замапленный буффер, то обычный glDeleteBuffers работает. Но можешь сперва вызвать glUnmapBuffer, чтобы уж на 146%.
105 575117
>>575062
>>575063
Да вроде разобрался. Мне надо было удалить vao и его vbo. Просто пытался удалить vao с glDeleteBuffers, а надо было с glDeleteVertexArrays. Но как я понял, можно не удалять vao, а пересоздать его vbo нужного размера.
106 575124
>>575117
Буфферы отвечают на вопрос "Что?", а VAO - на вопрос "Как?". В проекте обычно не больше пары десятков VAO вне зависимости от количества буфферов. Если у тебя в проекте появились одинаковые по разметке VAO - значит, что-то пошло не так.
107 575152
>>575124
У меня один vao с одним vbo, я его использую для посылания команд для инстансинга(рисую за один drawcall). Мне просто нужно было организовать для него расширение в случае рисования большого числа объектов.
108 583632
Как текст выводить? Есть нормальное что-то? Как это делают?

Когда делаю вывод текста мне очень не нравится как это выглядит в коде. Я рендерю символы через gdi+ со сглаживанием (но без cleartype), потом анализирую размеры символов (там внутри gdi какой-то чудовищный алгоритм, который сдвигает символы вверх-вниз неопределённым образом) и по ним определяю необходимо расстояние между строк и символов. По хорошему, чтобы это вручную отрендерить, нужно каким-то адекватным образом получить смещение, размер символа и ещё всякое, а не пиксели на прозрачность проверять. Помимо этого, есть куча ебанутых символов по типу zalgo - если их рендерить в квадратики 24х24, то они в них могут не попасть и каким образом получить их параметры переноса и как это учитывать - не очень понятно, нужно ежа родить чтобы во все эти тонкости векторных и растровых символов вникнуть. Собственно говоря с таким символами даже сам хромиум хреново справляется, хотя его разрабатывают куча людей значительно более подготовленных в плане рендеринга текста.
Для русской-английских символов ещё более-менее приемлимо получилось, но эстетическое неудовольствие дикое. Символов несколько десятков тысяч, и я просто без каких-либо оптимизаций подгружаю страницы по 256 символов по мере необходимости, и в остальном код отвратительного качества с этим текстом, какие-то костыли для символа переноса каретки (у остальных символов есть только ширина, относительное смещение насколько нужно сдвинуть следующий символ, а тут особый случай с абсолютным смещением который через if работает).

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

>Посылаем нахуй за легаси.


За что? Разницы же почти нет, ну, шейдеры стало поприятнее писать без тысячи встроенных переменных с непонятными именами, но зачем делать заново всякие вполне удобные pushmatrix когда они есть в легаси - мне не очень понятно.
108 583632
Как текст выводить? Есть нормальное что-то? Как это делают?

Когда делаю вывод текста мне очень не нравится как это выглядит в коде. Я рендерю символы через gdi+ со сглаживанием (но без cleartype), потом анализирую размеры символов (там внутри gdi какой-то чудовищный алгоритм, который сдвигает символы вверх-вниз неопределённым образом) и по ним определяю необходимо расстояние между строк и символов. По хорошему, чтобы это вручную отрендерить, нужно каким-то адекватным образом получить смещение, размер символа и ещё всякое, а не пиксели на прозрачность проверять. Помимо этого, есть куча ебанутых символов по типу zalgo - если их рендерить в квадратики 24х24, то они в них могут не попасть и каким образом получить их параметры переноса и как это учитывать - не очень понятно, нужно ежа родить чтобы во все эти тонкости векторных и растровых символов вникнуть. Собственно говоря с таким символами даже сам хромиум хреново справляется, хотя его разрабатывают куча людей значительно более подготовленных в плане рендеринга текста.
Для русской-английских символов ещё более-менее приемлимо получилось, но эстетическое неудовольствие дикое. Символов несколько десятков тысяч, и я просто без каких-либо оптимизаций подгружаю страницы по 256 символов по мере необходимости, и в остальном код отвратительного качества с этим текстом, какие-то костыли для символа переноса каретки (у остальных символов есть только ширина, относительное смещение насколько нужно сдвинуть следующий символ, а тут особый случай с абсолютным смещением который через if работает).

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

>Посылаем нахуй за легаси.


За что? Разницы же почти нет, ну, шейдеры стало поприятнее писать без тысячи встроенных переменных с непонятными именами, но зачем делать заново всякие вполне удобные pushmatrix когда они есть в легаси - мне не очень понятно.
109 583697
>>583632

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



stb_truetype
https://github.com/0xc0dec/demos
110 583824
>>558483
не надо так, юзай разные шейдеры
111 583827
>>568969
что?? вулкан это опенгл 5
112 583828
>>569546
сделай черно-белую картинку типа с тенью от листьев (с тайлингом) и юзай ее в шейдере
113 583846
>>568969
Опенсорц не имеет возраста. Когда есть большое комьюнити, оно оперативно вычищает легаси из кода, усовершенствует старые фишки, добавляет новые плюшки.
Если комьюнити нет, то проект кажется мёртвым, на самом деле, он фактически заморожен, как только данный "мёртвый-старый" проект кому-то понадобится, то вокруг него разовьётся комьюнити и см. п. 1.
В этом волшебная сила опенсорца!
114 583904
Я правильно понимаю, что glTexImage2D это устарелая функция, и лучше пользоваться glTexStorage2D? А ещё я слышал о каких-то bindless текстурах.
115 584935
>>583697
Спасибо больше, то что нужно.
116 593397
Существуют ли какие-нибудь годные книги по opengl на русском или придётся задрачивать Superbible через переводчик?
117 593422
>>568969
А как же Линукс ? А всякие там любительские токарные и фрезерные станки, которые работают на Raspberry PI , но разработчики хотят прорисовки в 3D на двенадцатидюймовом дисплее? А встроенные видеокарты? Intel GMA? А пользователи, у которых компьютер работает с 2010 и им нормас?
118 593443
>>565014
Я начал с OpenGL, перекатился на DX11. Они похожи, но DX удобнее. Плюс, в Visual Studio есть отладчик графики.
119 593473
>>593443
А нахуя изучать мертвое апи, которое кроме шиндовса нигде никогда не пригодится?
Ни мобилки, ни консоли, ни куча других платформ.
120 593486
>>593473
Десктопный гейминг = виндоус. Больше мне ничего и не нужно.
121 593487
Апре
122 593494
>>583846
И как оно, наверно опенсорсных игр полно? слежу за сдохшим Rigs of Rods, который сначала тащил один человек, потом другой, а теперь никто не тащит
123 594302
Как на win10 включать вертикальную синхронизацию?
wglSwapIntervalEXT не оказывает никакого влияния, как и принудительной выставление в настройках от нвидии. На win7 всё работало. При этом драйвер исправный, тому что в чужих программах вертикальная синхронизация работает.
Я не использую двойную буферизацию (рисую всё в GL_FRONT), то есть вызовов SwapBuffers не происходит. Если его поставить, то всё работает выдавая 60/30/20 фпс согласно теории.

Может быть появился какой-то нормальный способ получить сообщение о новом кадреб чтобы можно было просто сразу после этого сообщения начинать рисовать в передний буфер избегая разрывов?
Может быть стоит создать второй контекст с честной двойной буферизацией просто чтобы сообщения от новых кадрах таким образом получать? Бред какой-то.
124 594312
>>594302

>Как на win10


>OpenGL


Ты ещё дос-прерывания попробуй вызывать. Какое оупен джи эль, 2019 год на дворе.
Радуйся что новая винда хоть как-то его поддерживает.
Огл это ведь устаревшая срань, ну так в винде стоят драйвера какие-то для минимальной совместимости. Не более того.
125 594316
>>594312
А где тогда есть нормальный способ получить нужное мне событие от экрана?

>Какое оупен джи эль, 2019 год на дворе.


А ещё у меня 90% кода на легаси-функциях, кроме совсем тяжёлых вещей.
Как будто есть какая-то разница. Всё-равно всё сводится к более-менее одним и тем же вызовам функций в видеодрайвере.
126 594322
>>594316

>Как будто есть какая-то разница.


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

>А ещё у меня 90% кода на легаси-функциях


Ты вкладываешь свой опыт в то что перестанет работать. К примеру лет через пять ты надрочишься хорошо делать всё на огл, а его перестанет держать новая винда\линукс\смартфон. И всё, пять лет твоих знаний уходят в зрительный зал.
127 594345
>>594302

>вертикальную синхронизацию


>Я не использую двойную буферизацию


Ты ку-ку? vsync основан на буферизации, без back-буффера она не работает в принципе.
Front Buffer это прямой вывод на экран.
128 594375
>>594322

>пять лет твоих знаний


>Не знает как работает вертикальная синхронизация.


Да и я не думаю, что api вулкана или dx серьёзно ушли от огл. Концепции вроде бы одни и те же, такие же буферы, такие же шейдеры.

>>594345
А каким тогда образом это работало в win7?
Задний буфер я создаю (без него инициализация opengl занимала около 30 секунд только, лол), просто не переключаю его. Но да, всё как ты сказал, блокировка возникает в SwapBuffers, то есть это могло работать в win7, только если система посылает wm_paint правильным образом.

>Front Buffer это прямой вывод на экран.


Теперь уже не совсем. В win7 задержка была 0-2 кадра на 120фпс видео (то есть от 0 до 1 экранного кадра, всё согласно теории), а в win10 уже 2-4 и никакое DwmEnableComposition(false) уже не помогает из-за принудительной двойной буферизации всех приложений (разрывов в оконном режиме мне получить не удалось). 0-2 кадра осталось только в полноэкранном режиме.

Ладно, как по нормальному то сделать? Всего то нужно получить событие от экрана.
image.png8 Кб, 561x173
129 594816
Без юниформа это сделать никак нельзя? Что за маразм, как вообще можно было догадаться сделать такое? У меня же одни и те же текстурные блоки и я не могу представить ситуацию, где необходимо менять их номера во время работы.
Почему нельзя просто в шейдере прописать texture(0/2/4, ...) или uniform sampler2D texture1=0/2/4 на худой конец? Угу, в 4.2 можно, но долго же они соображали.
130 594818
>>594816
В DirectX можно.
131 594821
>>594816

> У меня же одни и те же текстурные блоки и я не могу представить ситуацию, где необходимо менять их номера во время работы


Текстурные блоки и перменные устанавливает драйвер и нельзя узнать заранее какие он присвоит индексы.
132 594949
>>594821
Но по факту я один раз при инициализации указываю номер и больше этот юниформ не трогаю. Если там что-то и меняется в индексах, то api/драйвер сами переставляют индексы, то есть с тем же успехом я мог бы сразу в шейдере указать 0 и api/драйвер в той же степени переставляло бы индексы.

Очень странно, что потребовалось дойти аж до версии 4.2, прежде чем они догадались. Я бы в первой же версии сделал бы или возможность задания номера из шейдера, или глобальный legacy-юниформ как все остальные переменные состояния. Но почему-то глобальный legacy-юниформ для gl_LightSourceParameters есть, хотя, наверное, никто никогда в жизни не использовал legacy-освещение и функции для него вместе с glsl-шейдером.
133 594957
>>594949
Для этого есть uniform buffer object и в шейдере можно задать его индентификатор
134 594995
>>594957
А есть какой-то список с кратким описанием расширений сгруппированным каким-либо образом, чтобы не открывать каждую из 195 (это для arb-расширений) статей?
Типа, расширение GL_ARB_texture_storage, позволяет выделять память для текстур за один вызов (или что оно там возволяет), можно использовать для того-то-то.
И так далее, по две строчки на каждое.
Гидроцефал орет.png395 Кб, 720x400
135 594996
>>594995
>>594957
>>594949
>>594821
Вы такие умные тут... Игры то делаете?
136 595030
>>594996
А надо?
137 595032
>>595030
Только это и надо.
138 595034
>>595032
Ой всё, тебе от нас только одно и надо.
139 595038
>>595034
Не мне
140 595047
>>595038
Все вы так говорите...
141 595052
142 595093
как узнать максимальную версию для core profile?
pbr.jpg115 Кб, 797x731
143 595897
Отлаживаю PBR шейдер
144 597043
Может ли opengl соревноваться с directx по критерию производительности в играх?
145 597048
>>597043
нет, лучше vulkan
146 597091
>>597048
Хуян. На хуяне заебешься даже сраный треугольник выводить, плюс этот треугольник будет работать только на топовых видеокартах.
147 597097
>>597091
opengl всёравно хуита
148 597098
>>597091

>только на топовых видеокартах


Ну извини, что твою мочу за 2к рубля с Авито не поддерживает, авось ещё на xp тут сидишь
149 597103
>>597043
Конечно. Это лишь api для общения с видеокартой. Пиксели всё-равно считает видеокарта, производительность может улучшиться только из-за минимизации накладных расходов внутри этого api, но они в любом случае составляют не слишком крупную часть.
150 597122
>>597098
Причем тут конкретно я? Если речь идет об охвате аудитории.
Есть неигровые ноуты, есть бюджетные компы с интегрированными видюхами. Не у всех юзеров есть деньги на видюху за 50 косарей.
Было бы странно, если бы юзер спокойно играл в игры на юнити на своём неигровом ноуте с интеловским процем и встроенной видюхой, а твой шедерв на пукане бы жидко пукал и обмякал при запуске. Особенно если этот шедевр в 2д.
151 597223
>>597043
В случае эмляторов всяких маняконсолей opengl иногда сильно посасывал у directx примерно на 5-20 фпс, в других случаях всё зависело от видеокарты и/или пряморукости разрабов эмуляторов. Вот примеры с эмулятором андроида и докой 2 (спойлер: огл снова соснул)
https://www.youtube.com/watch?v=54oU4XAWmM8
https://www.youtube.com/watch?v=04tXQ_o02Hs
152 597226
>>597223

>огл снова соснул


Можно попробую угадать почему? В случае с дотой. Игра изначально была на dx9, и opengl они просто за уши притянули, не вникая в opengl подменили функции, там где это можно было. Написали какой-нибудь враппер кривой, прослойку. В пользу этого говорит то что в dx9 режиме оно потребляет меньше всего памяти почти на гигабайт, лол. Они просто ogl не осилили, потому что в остальных режимах видеопамять запита на 1.5 гб - а в случае ogl на 900 мб, какой-то режим забыли указать, не загружают какой-нибудь буфер на видеокарту или ещё что-то.

И ещё я полистал моменты, во всех открывках кроме начала фпс хуже всего у dx11, что соответствует моему опыту игры в доту на разных api. Разница в 5-10 фпс при общем фпс в 200 довольно смешна.
153 597333
>>597226
Тем не менее, не один ааа разраб пока не подтянул ОГЛ на godlevel, а это значит, что на то есть причины
154 597412
>>597333
Дум 4 на опенгл
155 597413
>>597412
там же вулкан
156 597415
>>597413
До вулкана был опенгл
157 602378
Фрагментный шейдер имеет возможность прочитать содержимое буфера цвета/глубины? Каким образом лучше организовать раскрашивание с учётом уже имеющейся информации?

Точно сработает несколько проходов рендера в текстуру (там не так много слоёв, не больше 20) с передачей этой текстуры в шейдер, но не очень бы хотелось 20 раз перерисовывать всё, особенно если учесть, что для 75% пикселей хватит первого прохода и потом они просто висеть будут.
158 602539
>>602378

> Фрагментный шейдер имеет возможность прочитать содержимое буфера цвета/глубины?


Сам себя — нет. Другие — да. Глубину рендери сам. А дальше бред бессвязный.
159 602547
>>602378
https://www.khronos.org/opengl/wiki/Built-in_Variable_(GLSL)
in vec4 gl_FragCoord;
gl_FragCoord.z -- то, что тебе нужно!
можно ещё вывести из шейдера какую хочешь глубину, например, gl_FragDepth = 1.;
160 602550
>>602547
>>602378
это если о глубине, цвет вроде никак! в зависимости от того, что ты хочешь, лежащим там цветом можно через блендинг воспользоваться
161 602553
>>602550
перечитал вопрос и понял, что про глубину немного не то написал :( анон выше хорошо написал, из самого себя не прочтешь. довольно очевидно, если представлять себе, как оно там внутри может быть устроено
162 602571
>>602553

>довольно очевидно, если представлять себе, как оно там внутри может быть устроено


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

https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_shader_framebuffer_fetch.txt
163 602616
>>602571
мне кажется, блендинг происходит немного после вычисления цвета, как будто бы типа пиксели посчитал, а потом прикладываешь к фреймбуферу. поэтому я бы не сказал, что когда блендишь, оно читает буфер цвета
164 602712
>>602616

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


Я нарисую красный, поверх него полупрозрачный синий, сверху зелёный и потом ещё несколько. И он сохранит след от изначального красного. Если он вычисляет цвета потом - каким образом он хранит вот эти накладываемые поверх цвета? В стеке, лол? Даже если по каким-то причинам он в самом это делает, почему нельзя считать вот временное сохранение в шейдере?

Для чего хранить буфер цвета/глубины и результаты работы шейдера (причём, возможно по несколько раз на пиксель) отдельно, которые потом замешаются - если можно сразу провести несложную операцию сложения&умножения, что, как мне кажется, куда эффективнее, чем вводить дополнительный неявный буфер и какую-то сложную фиготу вокруг него.
165 603506
>>602712
не, "потом" это типа после отрисовки одного примитива(треугольника). а вообще, можно и хранить все цвета вместе, замешивая в конце, так получится что-то вроде order-independent transparency.
166 605840
Кто юзал layered rendering? Хочу каскадные шадоумапы за один проход рисовать, но прикинул и понял что сосну с одним буфером глубины. Кто-нибудь делал подобное?
167 605853
>>605840
Блядь я понял, слои фреймбуфера и слои текстуры это разные вещи. Чтобы сделать слоеный фреймбуфер надо texture array биндить сразу весь через glFramebufferTexture, а не вызывать glFramebufferTextureLayer по отдельности. Тех, кто писал спеки, надо раскаленной кочергой изнасиловать.
168 615743
Фишка sampler object в том, что можно создать один сэмплер glGenSamplers() и один раз выставить параметры с glSamplerParameter() и пользоваться ним с любой текстурой? То есть при создании новой текстуры не нужно больше вызывать glTexParameter()? А потом на отрисовке просто биндить этот сэмплер glBindSampler(), вместо glUniform1i(), верно?
169 615809
>>615743

> glBindSampler(), вместо glUniform1i(), верно?


Sampler меняет настройки текстур, например, GL_TEXTURE_MAG_FILTER, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_WRAP_T и тд
glUniform1 всё равно нужно использовать
170 615836
>>615809
Ну блин только лишний байндинг. Им вообще часто пользуются?
171 615991
Антоны, написал 100+ строк кода и наконец вывел треугольник! Невероятно!
172 615992
>>615991
Теперь попробуй на вулкане, там для треугольника понадобится 1.5к строк
173 615996
>>615992
Серьезно? На директе я делал такое за 200 с чем-то строк.

А вообще знания подобной оккультистики пригождаются? Работу можно найти?
image.png16 Кб, 709x220
174 616001
На проде серьезные дяди делают так?
175 616032
>>615992
https://gamedev.ru/code/articles/VulkanTriangle
И как на этом умудряются писать огромные проекты? Это же пиздец! Я просто в ахуе.
176 616034
>>615996
Легче найти работу на js-фронтенде.

>>616001
Нет, храни шейдеры в файлах.
177 616036
>>616034

>Легче найти работу на js-фронтенде.


То что найти работу легче, думаю, понятно всем. Насколько вообще возможно найти работу? Существует ли вакансии на рынке?
178 616043
>>615996
На Direct3D 11 наверное? На 12-м должно быть побольше.
179 616055
>>616043

>На Direct3D 11 наверное?


Это было вообще на 10 давным-давно. 12 что ли вулканизировали, тоже стал низкоуровневым?
180 616065
>>615996
Серьёзно, вот например.
https://github.com/SaschaWillems/Vulkan/blob/master/examples/triangle/triangle.cpp

>А вообще знания подобной оккультистики пригождаются? Работу можно найти?


В ДС спеца по вулкану с руками оторвут на шестизначную з/п, но нужно знать овердохуя всего, надо понимать, как работает gpu, как профилировать код, как пилить шейдеры.
>>616055
Директ нахуй не нужен, будущее за вулканом. Директ - это только шиндовс, вулкан - это самые разные девайсы, кроме десктопных систем, мобилки, планшеты и прочее.
181 616073
>>616065

>В ДС спеца по вулкану с руками оторвут на шестизначную з/п, но нужно знать овердохуя всего, надо понимать, как работает gpu, как профилировать код, как пилить шейдеры.


Это только в ДС наблюдается такой казус или вангуешь везде такой спрос на знатоков вулкана в индустрии?

>Директ нахуй не нужен, будущее за вулканом.


Очевидно ты прав, но насколько близко это будущее - хз. Директ будет долго дохнуть точно.
image.png15 Кб, 802x646
182 616083
>>615991
>>615991
Я овладел новым уровнем и совершил очевидный качественный скачок.
183 616141
Здравствуйте профи, скажите, сколько примерно строк кода займёт пересадка годота на десктопный GL рендер с тупого мобильного GLES?
184 616479
>>616141
Несколько тысяч, думаю..
185 616888
>>616065
С каким наслаждением я бы бил ебальники умникам выкатившим "графический апи нового поколения". Просто расхуярил бы в мясо нахуй. Это же надо догадаться - развернуть GL кишками наружу - типа жрите, новье же, блядь. Разве что нвидия подсуетилась со своим rtx экстеншеном на уровне модификации пайплайна. Нихуя нового. Ровным счетом.Только тысячи, миллионы, миллиарды бесконечного бойлерплейта, которые теперь ночами снятся.
test 2019-10-11 02-35-05.mp47,5 Мб, mp4,
1920x1052, 0:06
186 616891
Когда-нибудь я стану использовать матрицы, но не сегодня.
187 616901
>>616032
узнай о такой замечательной вещи как ООП.

Все это скрывается обертками и забывается. Дальше твой треугольник выводится все той же одной строкой
188 616902
>>616036
а кто по твоему пишет все эти юнити, ue, крайэнджины, дайсы, etc?

(эх, всегда завидовал что сегодня какой-нибудь чел пилит никому не нужный движок, а завтра он уже работает в epic над UE4)
189 616924
>>616901

>узнай о такой замечательной вещи как ООП.


Узнал, соглашусь.
>>616902

>пишет


Их мало.
image.png16 Кб, 778x235
190 616925
>>616901

>узнай о такой замечательной вещи как ООП.


Слепил говна.
191 616944
Антонуэны, пожалуйста, не обоссыте за тупой вопрос.

Как я понял, когда мы берем определенную модель и выводим ее посредством опенгл, мы добавляем каждую её точку в массив вершин и затем описываем в каком порядке какие треугольники там заебенить, да?
image.png86 Кб, 1233x1020
192 616969
Есть какая-нибудь IDE для шейдеров?
193 617000
>>616969
Онлайновые веб-приложения есть. Шейдертой, например.
194 617093
>>616969
Сделай у себя в программе перезагрузку шейдеров по нажатии кнопки, и пиши их в блокноте.

>>616036
В США есть. За пределами не особо.

>>616902
Хороший пример - handmade quake. Чел начал писать первый квейк с нуля и делать видео на ютубе, его взяли на работу в какую-то топовую компанию, после чего он удалил канал.
195 617096
>>617093

>после чего он удалил канал.


Зачем?
196 617097
>>617096
Не знаю. Возможно, по неопытности он писал не самый лучший код и не хотел, чтобы его имя ассоциировалось с этой поделкой новичка в будущем.

Отдельные видео вроде как можно найти на других каналах.
197 617098
>>617097
Вот он: https://twitter.com/philipbuuck

>UI Programmer at Epic Games, working on Paragon.

198 617113
>>617098
Ты связываешь написание квейка и приглашение на работу в эпик? Может его мама порекомендовала знакомым.
199 617114
>>616901

>замечательной вещи как ООП


Из 90х к нам?
200 617117
>>617113

>эпик


Насколько знаю это вообще ебанутая структура. Читал несколько отзывов на реддите и там как-будто филиал Россиюшки в США.

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


Справедливо сказано.
201 617173
>>617113
Может быть. Но обычно для человека без опыта главная проблема, чтобы его вообще заметили и пригласили на собеседование. Его проект мог помочь.

>>617117
На реддите когда пишут про Epic часто имеют ввиду Epic Systems, большая компания, пишет медицинский софт.
202 617175
>>617114
Без знания ООП тебе не перезвонят. Прогрессивный ты наш.
ECS это паттерн ООП. Deal with it.
sage 203 617195
>>617173

>большая компания


Не, там точно про Epic Games было. Обсуждение в контексте GameDev.
204 617197
>>617195
Случайно прилепил сажу.
205 617199
>>617195
На одной из моих работ со мной работал бывший программист рендера в UE. Вроде не жаловался. Говорил, у них никого никогда не увольняют, если человек совсем идиот, ему поручают делать ненужную работу.
206 617201
>>617199

> бывший программист рендера в UE


А его за что уволили?
207 617204
>>617201
Он сам ушел. Вероятно, на нашей работе ему дали сильно больше денег хотя сама работа была не очень, я думаю, он пожалел
208 617207
>>617204
А он работал в России в отделении эпика?
209 617208
>>617207
Нет, дело происходило в США и он муриканец.
210 617214
>>617208
И он в Россию перебрался? Или ты сам в штатах сейчас чалишься?
t23e70mc2nx8.jpg560 Кб, 2309x1299
211 617220
>>617214
Я тоже в штатах.
Давно экспериментирую с компьютерной графикой и симуляцией физики, планирую следующие несколько лет подналечь на учебу серьезнее, написать движок на вулкане, и попробовать найти работу в этой области.

Вот еще один источник вдохновения: два брата делают симулятор гонок (без использования движков), уже 10 лет. Один моделит, другой код пишет. Смотрится очень круто.

https://polycount.com/discussion/comment/2700286
212 617227
>>617220

>Я тоже в штатах.


Каким способом сцыганился туда? Кем работаешь там?

Через год переезжаю в Германию по учебе и оттуда хочу в штаты перебраться по работе.

>два брата делают симулятор гонок (без использования движков), уже 10 лет


Сильно. Выглядит очень круто, особенно, если учитывать то, что это пишут всего два брата-акробата.
213 617228
>>617227
Программистом работаю, по работе и переехал по L-1B. Сейчас переезжать стало заметно сложнее из-за дефицита H-1B, но в целом перебраться можно. Самые рабочие варианты - всякие гуглы-амазоны и финансовые компании.

В целом подумой, США не такая уж и класная страна для жизни, хотя с работой для программистов тут все очень хорошо.
214 617229
>>617228
Спасибо что отвечаешь. Надеюсь у меня все получится. Главное, язык выучить, а он, сука, не дается.

>хотя с работой для программистов тут все очень хорошо


В том то и дело. Кажется, нигде больше нет таких условий для программистов. А что касается Германии, то там даже хуже чем у Россиян дела обстоят.
215 617231
>>617228
>>617229
Оставайтесь в России, пацаны, на западе хуёво.
216 617232
>>617231

>Оставайтесь в России, пацаны, на западе хуёво.


А если я из Тувы?
217 617262
>>617232
Переезжай в Россию
218 617289
>>617232
Ты тувинец или старообрядец?
219 617306
>>617231
Переезжайте на запад, пацаны, там вы будете "ахуенно" работать, плотить налоги (ура-ура, всю жизнь мечтал), плотить за медицину (надоела бесплатная) и получать копейки (по тамошним меркам).
220 617309
>>617306
Уехать в Глазго-вот вариант,

У них там честные все, как Дональд Дак и Санта,

Всем подряд, за так, машины, бриллианты,

В окно кинул бакс, тебе два бумерангом.
221 617310
>>617306
В Европе бесплатная медицина и высшее образование, а также платят иногда пособия. Зависит от страны и твоей ситуации.
Но проблема в том, что средняя зп разраба 11К баксов в год. В СНГ это заебись деньги, многие зарабатывают по 3-4К в год.
В Европе люди делают больше, от 20К в год. Поэтому ты там будешь нищим будучи инди.
222 617313
>>617289
Я сибирский татарин.
Аноним 223 617495
Пиздуйте обсуждать работу в /pr/
224 617506
>>617495
Пиздуй нахуй с двачей, уебок. Здесь свободное, блять, общение, крысоголовый петроглиф.
225 617592
>>616055
Ты в лесу живешь? Direct3D 12 всегда был низкоуровневым.
226 617696
>>617592
Я про DirectX 9, 10.
227 621529
Какую реализацию OpenGL использовать для создания своего говна?
228 621532
229 621533
230 621535
>>621533
Я фреймворк имел в виду. Или тулкит. SDK. Хз, как это называть.
231 621537
>>621535
А хер его знает.
Ищи что-нибудь на гитхабе поплуярное и поддерживаемое.
Ну или пили сам!
232 623795
Расскажите про буфер трафарета.

Хочется получить число ненулевых значений (в идеале "гистограмму", какое число сколько раз встречается).
И граничные координаты (xmin, xmax - соответствующий самому левому/правому фрагменту с ненулевым значением). Чтобы прямоугольниками обрезать нужные области, и их размер был меньше размера всего кадра. Есть для этого функции какие? Как это делается? Я просто даже не знаю какие слова гуглить.
Я совершенно точно видел где-то метод позволяющий узнать количество закрашенных пикселей, но способ был древний и видел я его лет 10 назад - наверное это что-то из легаси.
А вручную это сделать я могу только на процессоре и наверное тогда будет быстрее просто без прямоугольников брать весь экран.
233 624797
glUniform3f(colLoc, 1.0, 0.0, 0.0);
Так всё работает, треугольник красный.
GLfloat myCol[] = {1.0, 0.0, 0.0};
glUniform3fv(colLoc, 3, myCol);

Так ничего не работает, никакого треугольника я не вижу.
В чём разница и ЧЯДНТ?
234 624827
Попробуй [ glUniform3fv(colLoc, 1, myCol) ] для приличия что ли.
235 624828
>>624827 <- >>624797
Вот это двинутая разметка получилась, конечно.
236 624868
>>624827
Спасибо, добрый человек! Заработало.
Я в вашем английском не понимаю ничего, поэтому умные буквы "The vector form loads count sets of values into the uniform variable's starting location." я пропустил, и прочитал только "If location is the start of an array, count sequential elements of the array are loaded."
Эти два предложения противоречат друг другу, нет?
237 624874
>>624868
Я тоже ничего не понимаю в лунном, но у тебя в команде уже написано 3fv из-за чего возникает закономерный вопрос - что бы могла обозначать вторая тройка и зачем ты вообще её туда поставил. Я бы попробовал 0, 1 и 12 (по размеру данных) - если бы методом тыка подбирал.

>поэтому умные буквы


Не представляю откуда ты эти умные буквы достал. У меня вот: https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glUniform.xhtml
И там написано "should be 1" во всех случаях если униформ не массив. Довольно понятно и однозначно.
238 624901
>>624874

>Не представляю откуда ты эти умные буквы достал


RedBook, восьмое издание, стр.48. В девятом издании такая же формулировка осталась.
Спасибо, начинаю осознавать. По мне так и на Кроновском сайте не понятно - но там хоть явно написано значение 1 использовать, я только 0 и 2, 3 попробовал (индекс, ласт индекс и size). Что count значит, я до сих пор не понимаю) Поживём-увидем, дойдёт ещё.
Я не понимал, что наш Vec3 - это single uniform variable, по мне так его тип - Вектор, тобишь массив по нашенски. Ну и бог со мной.
239 624926
>>624901
А оно ещё переиздаётся, лол? Тут нужно картинку со слоупоком. Я видел только супер-древнию с glutessellation, которая из прошлого века. И читать её сейчас совсем нет смысла, там даже не классическое легаси - там что-то ещё более древнее.

>Что count значит, я до сих пор не понимаю)


Там можно написать что-то типа uniform vec3 test[16] в шейдере, и тогда заполнять его нужно будет указывая 16 в том месте. Вроде бы.
240 625043
>>624926
Redbook довольно актуальна (на мой слоупочный взгляд) - восьмое издание было неслабо переписано чтобы перейти с 3й версии на 4.3, в девятом издании отличий мало, но есть - в бумаге у меня восьмое, к сожалению - и приходится так же поглядывать в девятое издание, оно 4.5. 4.6 ещё не вышла книжка, это да.
То же самое и с синей superbible - пытаются держать актуальной, жаль что последняя книжка в 15 году вышла.
А так, чтобы вкатиться - самое то, лучше чем opengl-tutorial.org с его 3.3. Ну как по мне - откуда ж мне знать, в самом деле.
241 625227
>>625043

>лучше чем opengl-tutorial.org с его 3.3


Не думаю. Я до глубины души убеждён что 97% лучше все вкатываться с 1.4 легаси - потому что оно интуитивно понятнее, чем создавать буфер, чтобы треугольник ебучий нарисовать. То есть так ньюфаг может зайти и написать gluLookAt/gluPerspective и рисовать свой куб. И крутить его в объёме как хочется. А все шейдеры подключать постепенно как расширения.
А тут значит 4 версия. Чтобы сделать хотя бы что-то, ему нужно понимать концепцию буферов, обоих шейдеров, хуйню про линейную алгебру и однородные координаты. Да у него просто руки опустятся и он пойдёт в юнити или годот. Или что там сейчас используют. Так можно сделать, только ты бородатый программист с 10 годами опыта в других областях - тогда запросто, можно сразу четвёртую версию.
А если бы ньюфаг изучал начиная с 1.4 - он бы уже знал и видел изнутри уже один способ как можно рисовать куб и как можно сделать свою обёртку для матриц и всего остального - он бы просто немного времени потратил и перекатился бы на четвёрку без субъективных изменений.
242 625271
>>625227
Не соглашусь.
Ну во-первых, между 3.3 и 4.5 лучше вкатываться с 4.5 - благо direct state access появился.
Но Вы предалагаете выбор не 3.3, а 1.4, так что отсюда - во-вторых: Так и в 4.5 есть волшебная портянка на два экрана, просто используй её (если сможешь скомпилировать, ха-ха!) - и рисуй свои треугольнички так же, как и в immediate mode, в портянку не заглядывай, просто используй волшебные функции.
Вкатываться с 1.х плохо тем, что как мне опыт говорит, люди привыкают, и когда их пытаешься на другую концепцию пересадить потом плюются и годами не могут привыкнуть к "новому". Без субъективных? Именно что с субъективными))) Зачем этот барьер своими руками создавать? Чтобы в Юнити не ушли? Да пусть идут, смежную профессию изучают.

А то, что нуб без линала в графику лезет - ну да, ему 1.4 хватит. На всю жизнь.
243 625273
А, ну и да - Redbook справочник, и не лучший. Он не для вкатывания.
244 625288
>>625227
для поделок типа змейка 3d или содомирующих кубов хватит и 1.4
для программирования графики надо учить современный OpenGL
это разные области
другое дело, что ничего не мешает даже школьнику понять концепцию буфферов и написать 30 лишних строчек
245 625941
Умные вы тут такие собрались. А вот за что новичку лучше взяться - за OpenGL или за Vulkan - не знаете.
246 625964
>>625941
За directx 11, серьезно
247 625972
>>625964

>2k20


>изучать закрытое анальное апи, работающее только под одной платформой вместо открытого и свободного, открывающего доступ на все платформы, от мобилок и веба до консолей и пекарен

248 625975
>>625972
Качественные апи в любой год лучше кросплатформенных и то не особо-то, только виндоус линукс и андроид поделок.
249 625989
>>625941
Для новичка OpenGL конечно. Вулкан это не про графику, а скорее про программирование гетерогенных вычислительных систем. Тут даже серьезные дяди с опытом 5-10 лет директов\опенжэлей на вулкан переходят натужно и с кровавым поносом.
250 626090
>>625989
Так я потому и спрашиваю - может пропустить OpenGL, и сразу так: Оп-ля, и я готовый спец по Вулкану. А на ГЛ посматривать как на дремучее легаси. Не тратя 5-10, треугольники я и так нарисую как-нибудь.
Главное - а нужен тот Вулкан на рынке-то?
Вот если я его годик поучу, а потом пойду работу искать?
251 626143
>>625989
Причем тут гетерогенные вычислительные системы? Такое обычно говорят, когда имеется несколько вычислительных устройств с разными архитектурами, типа цпу, гпу, плис, и между ними надо как-то параллелить работу. Вулкан вроде как нацеливается только на графику, как замена опенгл. Вот опенЦЛ можно сказать, что он про гетерогенные вычисления.

>>626090
Если планируешь работать по какому-то определенному направлению, то представь, что ты уже сейчас ищешь работу, смотри вакансии, мб даже пытайся устраиваться на какую-то стажировку, проходи собесы, узнавай какие вопросы спрашивают.
Опенгл по крайней мере даст понимание общих принципов и подходов, которые используются в графоне, типа шейдеры, пайплайн, буферы, 3д геометрия/линал и все такое.
252 626148
>>625975
Чем dx11 качественнее пукана?
253 626150
>>626143
Мне некогда на стажировку ходить, я на работу хожу фуллтайм. Шейдеры, пайплайн, буферы и линал я в общих чертах понимаю, а нормально осознать думаю уже в Вулкане. Так зачем мне OpenGL? Только если с ним работу легче найти намного, чем с Вулканом. Вот я и спрашиваю, на рынке вулкан нужен? Какие-то вакансии висят, но может это так, словечко модное написали - а на самом деле он не нужен никому?
254 626156
>>626150
Зайди на сайты с вакансиями и посмотри. На хх 160 вакансий с опенгл, 25 с упоминанием вулкана, причем зачастую указано "будет плюсом знать вулкан/директх/опенгл", и зачастую это позиции с довольно высокими требованиями на уровне мидла/сениора конкретно в графике (ну и зарплаты там соответствующие). Первое означает, что они мб даже не обязательно будут юзать вулкан, или им будет достаточно от тебя норм знания опенгла, а они мб дотянут тебя по вулкану если надо. Второе означает, что скорее всего от тебя будут требовать коммерческий опыт (1-3 года или больше) использования чего-то из перечисленного, с конкретными примерами разработанных программ, т.е. самописные поделки уровня лаба1 не прокатят.
Короч, я думаю, что резона не слишком много.
255 626308
>>626156
Ну то бишь в резюме он нужен только в виде "А ещё и в Вулкан умею! Чуть-чуть правда, но не важно." И без OpenGL лезть работать смысла никакого. ОК, жаль - я уж размечтался каким я уникальным незаменимым спецом буду)
256 626313
>>626308
В будущем будет только вулканама, пока ты научишься оно уже ебнет тебя по тупой башке
257 626333
>>626313

>В будущем будет только вулканама


Лет через 10?
258 626851
Вкачусь в тред на постоянную основу. Месяц назад начал изучать огл в свободное от работы время и писать свой графический движок. Учу по туториалам ogldev и learnopengl, как закончу туториалы перекачусь в штудирование книг.
Стараюсь движок аккуратно писать, с деревом сцены, автоматическим управлением юниформами в шейдерах и т.д.
Сейчас начал реализовывать отложенный рендеринг, после имплементации попробую ввинтить его во всю остальную архитектуру, чтоб удобно переключать с помощью фактори паттерна и т.д.
Выше в треде прочитал про forward+ и clustered forward. До этого о них не слышал, по описанию сильно сложнее чес deffered rendering, но попробовать хочется, чтоб прям вообще на любой вкус рендеринг был. Интересно что у этих методов с рендерингом прозрачных объектов. Тоже нужно совмещать с прямым проходом именно для таких объектов?
Пишу на C# с использованием обёртки OpenTK, т.к. в C++ опыта не особо много, а к .net питаю очень тёплые чувства. Хотя вот wpf с огл не особо дружит.
Вообще самое тяжёлое с чем сталкивался до сих пор - это кватернионы. Много времени потратил на изучение и попытки визуализировать у себя в голове и на реализацию всех поворотов в движке через эти кватернионы. Вроде что-то прлучилось и какое-то понимание пришло, но периодически возвращаюсь к этой теме, зачётная хуйня.
259 626852
>>626851
В шапке, кстати, увидел ссылку на канал thebennybox. С него я как раз и начал, годный чувак, слушать интересно и приятно, жаль он делает вилосы раз в полгода сейчас.
А вообще, подскажите, пожалуйста, насколько информация из его роликов и из туториала learnopengl устарела на текущий момент. Всё сильно поменялось и нужно доставать последнее издание какой-нибудь книги и навёрстывать упущенное или принципиально конвеер и другие основные вещи не особо изменились и имеет смысл продолжать обучение как есть с расчётом на то, что по мере изучения новых вещей движок я буду модернизировать?
260 626873
>>626851

> эти кватернионы. Вроде что-то прлучилось и какое-то понимание пришло


А я до сих пор не понимаю.
Главное, не могу понять, в чём разница между К. и матрицей вращения (поворота/направляющих косинусов).
261 626907
>>626313
О, глубинное непонимание Вулкана детектед.
262 626909
>>626873
Никакой разницы. Кватернион можно представлять матрицей с обычными операциями над матрицей. Только что матрицы перемножать дольше, для 3х3 - это вроде как 7х9 (4 умножения, 3 сложения) операций, а для кватерниона 7х4.
А ещё кватернионы можно складывать покомпонентно получая промежуточное значение. А вот если у тебя есть матрица поворота и тебе нужно получить поворот в 74.1% от поворота этой матрицы, то что ты будешь делать? А с кватернионами достаточно просто посчитать новый кватернион равный (1,0,0,0)0.259+0.741(<исходный поворот>)
263 626948
>>626852

> А вообще, подскажите, пожалуйста, насколько информация из его роликов и из туториала learnopengl устарела на текущий момент


Всё что 3.3 версии и выше это нормальная информация.
264 627235
>>626948
Можно на компатибилити профиле сидеть и 1.1 хуярить, пока не заработает и просветление не придёт. Мне кажется, он с ума сойдёт, если сразу станет хеллоуворлд на гл3+ адаптировать под свои костыли.
265 627389
>>626873

>А я до сих пор не понимаю.


А их ещё и понимать надо? Я вот когда исправил баг в самописном модуле управления матрицами, так и не заглядывал туда уже несколько месяцев...
>>627235

>Мне кажется, он с ума сойдёт, если сразу станет хеллоуворлд на гл3+ адаптировать под свои костыли.


+1, версия 3 добавила столько лишнего, не понятно, на что нужно в первую очередь смотреть, чтобы разобраться. Даже хелловорлд выглядит как стена бессмысленного текста, а не программа...
266 627399
Тупа:
wget http://jogamp.org/deployment/jogamp-current/archive/jogamp-all-platforms.7z
7z x jogamp-all-platforms.7z
cd jogamp-all-platforms
mkdir -p demos/es2
cd demos/es2
wget https://raw.github.com/xranby/jogl-demos/master/src/demos/es2/RawGL2ES2demo.java
cd ../..
javac -cp jar/jogl-all.jar:jar/gluegen-rt.jar demos/es2/RawGL2ES2demo.java
java -cp jar/jogl-all.jar:jar/gluegen-rt.jar:. demos.es2.RawGL2ES2demo

И никакой ебли со студией, glew и прочими glfw. Ебашь хоть в блокноте.
267 627404
>>627389
Да не, в 3 версии кокрастыке всё очень чётенько и понятно, и всё очевиднее, чем в 1.1. Просто дебажить опенгл это ад, тут квады воткнул вместо треугольников, тут VAO забиндить забыл, тут на sizeof(float) у страйда забыл умножить и всё разваливается, а сам опенгл будет молчать в тряпочку, пока ты GetError после каждой строчки не засунешь.
268 627494
>>627404
Надо юзать отладчики типа CodeXL которые работают если повезет

В этом прелесть директ3д, у тебя сразу в студии есть отличный отладчик, можно смотреть все вызовы, состояние внутренних объектов, входные-выходные данные шейдеров, кучу всего.
269 627558
>>627404

>Просто дебажить опенгл это ад


Ооо, знакомая ситуация, я в своё время замучился, пытаясь нарисовать хоть что-то, кроме пустого окошка. Но хуже всего когда что-то происходит и никакой ошибки нет, но ты не видишь результат работы, потому что он сместился куда-то не туда и ты не можешь его найти, потому что ещё не прикрутил камеру... или оно рисуется прозрачным цветом, или отрезается не там, где ты этого ожидаешь, и в итоге вертишь все эти треугольники, но ничего не видишь. Ужасно.

>>627494

>директ3д


ИМХО, названия команд у OpenGL как-то проще для понимания, D3D сложнее осваивать (но я давно пытался и ничего не помню). А ещё OpenGL не прибит гвоздями к виндувс.

Да и не все ж сидят в студии, OGL/D3D можно использовать из самых разных ЯП.
Capture.PNG124 Кб, 1008x720
270 627562
Меши в буферы рисовать, как оказалось, просто. Нужно бы теперь вокруг источников света отрендерить сферы / конусы, чтоб знать, какие пиксели они задевают и можно тогда уже считать освещение.
271 628072
>>627562

>отрендерить сферы / конусы


Расскажи про эту систему в общих чертах или статью с кратким описанием скинь. Как тебе сферы помогут обсчитывать освещение?

И вообще, может быть есть какой-нибудь сайт со сборником технологий по типу теневых объёмов. Просто общие описания, можно без деталей реализации.
272 628078
>>628072
Я делаю по туториалу ogldev (в шапке третья сссылка в разделе Туториалы). Там уроки 35-37 про отложенный рендеринг.
Конкретно сферы и конусы считать свет мне не помогут. Они нужны исключительно в целях оптимизации производительности. Идея в том, чтобы сократить количество пикселей, для которых нужно будет запускать фрагментный шейдер. Учитывая, что вычисление освещения - тяжёлые операции, мы стремимся сократить их количество.
Но, как и везде, выбор техники зависит от постановки задачи.
Если у тебя в сцене много источников света, то deffered rendering справится быстрее, чем обычный forward rendering, но наложит другие ограничения.

>может быть есть какой-нибудь сайт со сборником технологий


Вот тут хз
273 628097
>>628078
А, всё понял, спасибо.
Я знал в общих чертах про идею отложенного освещения, но мне казалось, что оно просто в буфер рисует глубину/нормали, и источники света потом считает классическим способом видимы ли они. Я просто из 2006, когда на сцену 4 источника света это уже много, а рендеринг в несколько буферов сразу был диковинкой, и потому нормали рисовали/глубину/цвета рисовали поочерёдно.
274 628116
ЖеЭлю пизда посоны, не учите его. Его уже все нахуй посылают, от яблок до зеленых жидов. Даже лучи не завезли. Перекатывайтесь сразу в вулкан.
275 628241
Нарисовал треугольник, очень доволен собой.
Но вот какая засада: Рисую по Супербиблии, а там вершины захардкожены в вершинном шейдере (соответственно их всего три для первых трёх gl_VertexID) (ну это для начала, надеюсь - чтобы как раз народ буферами не пугать). Так вот, когда шейдерная программа состоит из вершинного шейдера и фрагментного шейдера - всё хорошо. Но дальше в книжке - тесселяция, и когда я добавляю в программу тесселяционные шейдеры
GLuint program = glCreateProgram();
glAttachShader(program, vertex_shader);
glAttachShader(program, tcs_shader);
glAttachShader(program, tes_shader);
glAttachShader(program, fragment_shader);
glLinkProgram(program);

треугольник, гад, перестаёт отрисовываться. Ошибки компиляции при этом не вылезают. Чего я забыл? (Ну, понятное дело, кроме как код шейдера приложить к посту)
276 628247
>>628241
Ты шейдеры скомпилировал?
Вообще, добавь везде проверки на результат.
После компиляции шейдера (glCompileShader) вызови glGetShader с параметром GL_COMPILE_STATUS и проверь, какой статус компиляции.
Потом, после glLinkProgram, вызови glGetProgram с параметром GL_LINK_STATUS и тоже проверь, всё ли ок.
Потом провалидируй программу glValidateProgram, а потом опять glGetProgram с параметром GL_VALIDATE_STATUS.
Либо у тебя где-то ошибка в последовательности действий, либо косяк уже в самих шейдерах.
Если в шейдерах, то залей на пастбин, может кто разберётся. Я пока тесселяцию не трогал
277 628251
>>628247
Компиляцию шейдеров я проверяю, и результат линковки - пока нет.
Сразу вдогонку вопрос: в чём разница тогда между glGetShader() и glGetShaderInfoLog(), которым я пользуюсь?
278 628252
>>628251
Вроде дошло - glGetShader возвращает флажок, а glGetShaderInfoLog - строку, да?
279 628255
>>628247
Спасибо, и в самом деле при линковке проблема.
Книжка что-то непоследовательно написана, выход вершинного шейдера не соответсвует входу tcs.
280 628258
>>628255
Вот ведь какая оказия - все проверки теперь выдают GL_TRUE, а треугольник всё равно не рисуется...
А на pastebin выкладывать код из книжки не хочется.
В шейдере я уверен, уж копипастить я умею. Тут какая-то хитрость в том, как Tesselation Shader использовать. Юзал его здесь кто? Чего ему не хватает?
281 628291
>>628252
Да, строку, которая может содержать ворнинги, сообщения диагностики и т.д.
>>628258
Попробуй пройтись по туториалу ogldev (урок #30):
triplepointfive.github.io/ogltutor/tutorials/tutorial30.html (https в начале).
Может озарит. Он в туториалах тоже не весь код пишет, я обычно параллельно поглядываю в его гитхаб (github.com/triplepointfive/ogldev для каждого урока своя программа, но одинаковые вещи он вынес в отдельные библиотеки).

А, и ещё, проверь, поддерживают ли у тебя дрова видиокарты OpenGL 4.x. (с помощью glGetString(GL_VERSION)). А то вдруг для тебя мир тесселяции закрыт в принципе.
282 628361
Тред, конечно, мёртвый. 280 постов за год. Но, учитывая, что люди, сюда заходящие, в основном занимаются изучением ogl, может имеет смысл создать какой-нибудь чат в том же дискорде? Двач как платформа для совместного обучения не особо пригоден. Фидбэк получаешь долго, если тред не особо популярен.
Хотя, пока писал, представил, как сильно можно зафлудить чат, если переписываться короткими сообщениями и чё-то передумал
283 628364
>>628361
На геймдев.ру раздел компьютерной графики относительно живой, хотя где-то 2/3 постов там флуд.
284 628699
>>628361

> имеет смысл создать какой-нибудь чат в том же дискорде?


Зачем? Чтобы мне триллион лет тратить на поиск когда тут в треде я через ctrl+f могу найти что-то?
Как мне там следить за перепиской людей, если тут можно отвечать на конкретный пост со ссылкой на него?
Зачем мне в какой-то херне регаться если тут зашёл и сразу написал? Не считая того, что то говно ещё и номер просит у меня.
285 628709
>>628699
Спасибо за комментарий.
286 628799
>>628699
В дискорде есть поиск
287 628869
>>628361
Мысли шире! Нужно создать стартап, который выпустит приложение для мобилок на основе блокчейна, (потом и поддержку макоси замутим!) в котором любой сможет задать свой вопрос по опенджиэлю, и прогрессивные алгоритмы датамайнинга не без помощи машинлёнинга ответят на него! Можешь начинать делать.
288 628872
>>628869
Лутбоксы забыл, балда!
289 628873
>>628869
Такие идеи на дороге не валяются. Забираю!
290 629085
>>628869
Два смузи этому постмодернисту.
291 629086
Читаю сейчас про то, как flycast (эмулятор дримкаста) переезжает на вулкан. Встретил там такую строчку:
Emulating the Dreamcast’s graphics chip (PowerVR2) wasn’t too difficult bar for one feature namely order-independent transparency which isn’t available as a feature in graphics APIs like OpenGL and DirectX
А как это вообще - order independent transparency?
292 629094
>>629086
Это когда итоговая картинка не зависит от очерёдности рисовки прозрачных полигонов.
https://habr.com/ru/post/224003/
293 629208
>>629094
Ну что из названия вытекает, я понимаю) Я не понимал, как это вообще реализуется. Спасибо за ссылку - там алгоритм, а в вулкане это, значит, прям в АПИ? Более того, в древнем дримкасте это, получается, уже в конвеере есть?
294 629460
Мне визуально никак не представить: Мы контекст привязываем к буферу, или буфер к контексту? Как это официально преподносится? И правда ли, что 4.6 позволяет как-то забыть про эти привязки в стиле С и даёт что-то более ООП-подобное?
295 629909
>>629460
Биндится handle к target.
Ты, верно, под контекстом подразумеваешь таргет, а под буфером - handle.
Хендл - это тот инт, имя, которое тебе возвращает glGenBuffers() и ему подобные.
296 629915
>>629909
А ещё один handle можно забиндить к нескольким target. Представляй это как хочешь)
out.png46 Кб, 970x553
297 630390
Хочу, чтобы линии и точки были с плавно перетекающим цветом. Видел туториал, где для bloom-света генерировали отдельные буфер, а потом совмещали.
Мне тоже придётся сначала рендерить обычные вертексы, в отдельный буфер линии, в отдельный точки, а потом мерджить или можно как-то разные программы (program шейдеры) для разных вертексов заделать?
298 630427
>>630390
Можно картинку что ты имеешь ввиду? Я ничего не понял.
Линии и так с плавно перетекающим цветом, если разным вершинам задать разный цвет.
Точки, если ты хочешь чтобы не было фигни как на твоём пике, ты можешь рисовать их как пирамидки по глубине.
aaaaa.png8 Кб, 400x400
299 630430
>>630427
Не, как раз как на картинке мне и надо. И чтобы линии были с градиентом в другую сторону, как на пике.
300 630431
Как рендерить в аниме-стиле?
301 630443
>>630431
Использовать плоское освещение или не использовать.
302 630448
>>630443
А контуры? А блики в глазах? А волосы? А одежду?
image.png35 Кб, 592x593
303 630458
>>630430
Рендеришь нужные линии, точки и полигоны в чёрно-белых цветах, немного размываешь, полученное значение используешь, чтобы интерполировать два твоих цвета получая более-менее плавный переход от пикселей линий/точек/полигонов к пустым?
Всё ещё ничего не понял. Сцена трёхмерная или двухмерная, каким образом рисуются две пересекающиеся линии?

>чтобы линии были с градиентом в другую сторону


Так? Как на каком пике? На твоём? У тебя же просто линейно размытая линия. Какой смысл имеет сторона градиента, если ты можешь поменять два цвета местами или вычесть из 1 нужное значение?
304 630486
>>630458
Это не важно. Мне всё-равно пондабится сделать так, чтобы цвет в виде контура плыл по линии.
Вопрос в том, мне нужно это рендерить в отдельный буфер, а потом их смешивать или можно как-то разные шейдерные program для разных вертексов запустить?
305 631134
Друзья!
Аноны! Какой там треугольник, точку третий день нарисовать не могу. Если закоментить 27-28 строчки, то точка появится, но за легаси здесь же и послать могут...
Шейдера у меня косые, или что? Сколько код не ковыряю - вроде ж всё правильно. Что забыл?

1 #include <string.h>
2 #include <GL/glew.h>
3 #include <GLFW/glfw3.h>
4
5 static const GLchar pVS[] =
6 {
7 "#version 450 core \n"
8 "void main(void) \n"
9 "{ \n"
10 " gl_Position = vec4( 0.0, 0.0, 0.5, 1.0); \n"
11 "} \n"
12 };
13
14 static const GLchar
pFS[] =
15 {
16 "#version 450 core \n"
17 "out vec4 color; \n"
18 "void main(void) \n"
19 "{ \n"
20 " color = vec4(1.0, 0.0, 0.0, 1.0); \n"
21 "} \n"
22 };
23
24 int main(int argc, char argv)
25 {
26 glfwInit();
27 glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
28 glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 5);
29 GLFWwindow* window = glfwCreateWindow(640, 480, "testTitle", NULL, NULL);
30 glfwMakeContextCurrent(window);
31 glViewport(0, 0, 640, 480);
32
33 glewInit();
34 glfwSwapInterval(1);
35
36 GLuint shaderProgram = glCreateProgram();
37 // VERTEX Shader
38 GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
39 glShaderSource(vertexShader, 1, pVS, NULL);
40 glCompileShader(vertexShader);
41 // FRAGMENT Shader
42 GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
43 glShaderSource(fragmentShader, 1, pFS, NULL);
44 glCompileShader(fragmentShader);
45 glAttachShader(shaderProgram, vertexShader);
46 glAttachShader(shaderProgram, fragmentShader);
47 glLinkProgram(shaderProgram);
48
49 while(true)
50 {
51 glClear(GL_COLOR);
52 glUseProgram(shaderProgram);
53 glDrawArrays(GL_POINTS, 0, 1);
54 glfwSwapBuffers(window);
55 }
56 glfwDestroyWindow(window);
57 glfwTerminate();
58 return 0;
59 }

компилю, если что, так:"g++ main.cpp -lGLEW -lglfw -lGL"
305 631134
Друзья!
Аноны! Какой там треугольник, точку третий день нарисовать не могу. Если закоментить 27-28 строчки, то точка появится, но за легаси здесь же и послать могут...
Шейдера у меня косые, или что? Сколько код не ковыряю - вроде ж всё правильно. Что забыл?

1 #include <string.h>
2 #include <GL/glew.h>
3 #include <GLFW/glfw3.h>
4
5 static const GLchar pVS[] =
6 {
7 "#version 450 core \n"
8 "void main(void) \n"
9 "{ \n"
10 " gl_Position = vec4( 0.0, 0.0, 0.5, 1.0); \n"
11 "} \n"
12 };
13
14 static const GLchar
pFS[] =
15 {
16 "#version 450 core \n"
17 "out vec4 color; \n"
18 "void main(void) \n"
19 "{ \n"
20 " color = vec4(1.0, 0.0, 0.0, 1.0); \n"
21 "} \n"
22 };
23
24 int main(int argc, char argv)
25 {
26 glfwInit();
27 glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
28 glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 5);
29 GLFWwindow* window = glfwCreateWindow(640, 480, "testTitle", NULL, NULL);
30 glfwMakeContextCurrent(window);
31 glViewport(0, 0, 640, 480);
32
33 glewInit();
34 glfwSwapInterval(1);
35
36 GLuint shaderProgram = glCreateProgram();
37 // VERTEX Shader
38 GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
39 glShaderSource(vertexShader, 1, pVS, NULL);
40 glCompileShader(vertexShader);
41 // FRAGMENT Shader
42 GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
43 glShaderSource(fragmentShader, 1, pFS, NULL);
44 glCompileShader(fragmentShader);
45 glAttachShader(shaderProgram, vertexShader);
46 glAttachShader(shaderProgram, fragmentShader);
47 glLinkProgram(shaderProgram);
48
49 while(true)
50 {
51 glClear(GL_COLOR);
52 glUseProgram(shaderProgram);
53 glDrawArrays(GL_POINTS, 0, 1);
54 glfwSwapBuffers(window);
55 }
56 glfwDestroyWindow(window);
57 glfwTerminate();
58 return 0;
59 }

компилю, если что, так:"g++ main.cpp -lGLEW -lglfw -lGL"
306 631203
>>631134
Может у тебя карта не поддерживает 4.5?
307 631351
>>631134
Не, всё нормально с видяхой. Заработало после того, как я забиндил VertexArray сразу после glewInit().

GLuint VertexArrayID;
glGenVertexArrays(1, &VertexArrayID);
glBindVertexArray(VertexArrayID);

Зачем он нужен? Он же пустой. Что происходит, когда выполняешь BindVertexArray?
308 631359
>>631351

>Он же пустой


Без VertexArray ничего не нарисуешь. Впрочем, если снизить версию OpenGL и/или включить Compatibility Profile должно работать и без него.

>>631351

> Что происходит, когда выполняешь BindVertexArray


glBindVertexArray binds the vertex array object with name array. array is the name of a vertex array object previously returned from a call to glGenVertexArrays, or zero to break the existing vertex array object binding.

If no vertex array object with name array exists, one is created when array is first bound. If the bind is successful no change is made to the state of the vertex array object, and any previous vertex array object binding is broken.
309 631362
>>631359

>glBindVertexArray binds the vertex array object with name array


Ну это-то даже мне понятно, хотя казалось бы...

>Без VertexArray ничего не нарисуешь


Это я за три дня понял hard way
Но почему? Чем он так (даже пустой) важен, и при этом http://www.ogldev.org/www/tutorial02/tutorial02.html про него даже упомянуть забывает?
310 631364
>>631362

>почему


Хз, я не специалист, просто мимо шёл. Код из архива уроков (get the source) у тебя работает?
311 631367
>>631364
Код из урока, скажешь тоже! Я его даже скомпилировать не могу))) А уж отреверсить тем более.

>просто мимо шёл


Ну так я и не у тебя спрашивал (это при всём уважении, не обессудь)
312 631368
>>631367

>Ну так я и не у тебя спрашивал


Хуя ты дерзкий.

>Я его даже скомпилировать не могу


А ты постарайся.
image.png110 Кб, 413x450
313 634063
Бамп
314 638615
>>634063
а что это?
315 638646
.
316 638659
Перешёл на DirectX 11, всем рекомендую 12 не нужен, линукс не нужен, мобилки не нужны. Всё просто и логично.
317 638969
>>638659
Изучая OpenGL / DirectX, в первую очередь изучают графический пайплайн и различные алгоритмы. Реализация какого-нибудь MSAA / Ambient Occlusion / Clustered, tiled, хуяйлед rendering и т.д. не будет сильно отличаться в зависимости от выбранного API. Будешь знать алгоритмы - сможешь где угодно закодить, покурив документацию по API. Хоть свой софтверный рендерер пиши.
Выбирай из своих нужд. Если тебе конкретно не нужен OpenGL - твоё дело. Рекомендации твои тут нахуй никому не впёрлись. В названии чёрным по белому написано "OpenGL thread".
318 638977
>>638969
Чего ты так обиделся? Тред всё равно мёртвый. Можно создать тред по DirectX, но он тоже будет мёртвый.
319 638990
>>638977
Ну, значит нет особого смысла в этих тредах. В любом случае, на вопросы, которые тут задают, уже даны ответы на других ресурсах. А любой, кто решит изучить OpenGL, найдёт информацию из шапки на первых двух страницах гугла. С любым другим API ситуация та же. Как и со всеми узкоспециализированными тредами на дваче. Польза, наверное, только в том, что можно с кем-нибудь анонимно поделиться результатами своей работы.
320 639149
>>638659
Я тоже считаю, что DirectX 11 лучше чем OpenGL. Там все более логично продумано. И дебажить легче. Единственноe, что сперва может немного странным показаться, если ты совсем новичок в прогерстве, это WinAPI. Ну для этого существуют всякие врапперы.
321 639195
>>638990>>638977
Нужно значит переквалифицировать тред в один общий, где вместо использования условного говноюнити пишут руками каждую фигню на сыром dx/opengl и считают матрицы и октодеревья. Эдакий низкоуровневый геймдев.
322 641104
Я что-то не пойму, какое преимущество мне дает glCreateTextures() и его direct state access по сравнению с обычным glGenTextures()
323 641105
>>639149

>если ты совсем новичок в прогерстве, это WinAPI. Ну для этого существуют всякие врапперы.


при том что DX заводится и на SDL и на GLFW и еще вообще... во всем виноваты недоучки учителя
324 641106
>>639195
вообще да, давно пора завести один общий тред для господ-движкописателей и иследователей прекрасного графония.

Чтобы в нем можно было обсуждать и OGL и вулкан и DX и даже софтрендеры под комодоры (а то проводили тут крутой конкурс по олдскульному геймдеву, а на дваче даже пообщаться негде на тему "4кб всем хватит")
325 641108
>>641106
Ну так создай тред, или за тебя барин создать должен?

>>641105
Зачем нужны врапперы, когда код создания окна можно скопировать с MSDN. А если ты делаешь приложение на DirectX, тебе эта "кроссплатформенность", скорей всего, не нужна. Тем более, врапперы часто содержат баги, например, в СДЛ был баг с эвентами мыши.
326 641147
>>641108

>Зачем нужны врапперы, когда код создания окна можно скопировать с MSDN


Копировать даже не нужно. Когда в Visual Studio создаешь новый Win32 проект, то там уже готовый код с окном.
327 641410
>>641108

>Ну так создай тред, или за тебя барин создать должен?


а кто шапку напишет?
328 641411
>>641410
А она нужна, как ты себе её видишь? Почему не достаточно описания, что тут обитают велосипедисты?
329 641416
>>641411
нужна. и почему сразу велосипедисты? может передовики изучающие новые вещи которых еще нет в движках? (там в юньку хоть вулкан завезли? а трасировку лучей добра от nvidia?)
330 641417
>>641411

>как ты себе её видишь? П


список важной литературы
331 641419
>>641416
Я для примера первое попавшиеся слово назвал. Велосипедисты не в смысле делать то что уже сделано, а в смысле, что ручная сборка.
332 641473
>>641104
Сам себе отвечу. Нашел статью, где кратко написано про Direct State Access. https://habr.com/ru/post/456932/
Я так понял, что теперь не нужно возиться с глобальным стейтом. А еще наверно можно мультипоточность использовать? Например одновременно создавать текстуры или буфферы на разных потоках. Верно?
333 641604
>>641105
DX'у чтобы завестись нужен только хэндл окна, так что логично. Я вообще использовал его в дотнете в винформс приложении (графический код был на плюсах в dll + врапер на C++/CLI).

Единственное где с ним есть проблемы это в QT - у QT своя отрисовка окон через опенгл/вулкан, поэтому с DX он интегрируется ректальным способом.
334 641636
Пишу свою glm::perspective()
В результате умножения на получившуюся матрицу вершины улетают непонятно куда. Знает кто онлайн ресурс навроде http://grapher.mathpix.com/ - чтобы визуализировал результат умножения матрицы на вектор?
335 641637
>>641636

>свою glm::perspective()


Зачем? Нужно матрицу умножать на вершины, а не вершину на матрицы.
Вот тут есть все уравнения же, просто заведи легаси, через glGet получай матрицу и сравнивай со своей. Можно просто 1 в 1 уравнения скопировать, у меня всё работало.
https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluPerspective.xml
https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluLookAt.xml
336 641653
>>641636
Вангую, что ты накосячил с порядком row-major и column-major.
337 641656
>>641637
>>641653
Понятно, что все шибко умные, сами придумывают проблемы, сами решают. Естественно, я сравнивал с результатом работы glm::perspective(). Матрица у меня получается идентичная, с ГЛМ-овской реализацией так же не работает. Естественно, я соблюдаю порядок умножения матриц.
Бонусом отвечу на вопрос зачем: затем, что мне больше любопытна математика процесса, чем кириллство. Пользуюсь http://ogldev.atspace.co.uk/www/tutorial12/tutorial12.html где не просто формулы копировать, но и матрица последовательно выводится.
Можете не гадать, где я накосячил - в ванговании я сам великолепен.
По существу вопроса нечего сказать? Ну так продолжаем молчать в уютном тредике.
338 641658
Поссал на всех ничтожеств итт
339 641659
>>641656
Кидай ссылку на pastebin с кодом, где происходят перемножения + код вершинного шейдера. А то ты просто написал, что есть проблема и ёрничаешь, когда тебе попытались наванговать. Если не хотел вангования, зачем описывал проблему?
По теме вопроса, можешь попробовать matlab или wolfram какой-нибудь. Но проще, как мне кажется, будет на листочке посчитать всё на примере 2-3 вершин.
340 641662
>>641656
Ты просто жалуешься на улетающие вершины, при этом не можешь написать сам для себя демку на 40 строк с визуализацией нужных тебе штук (или на сколько оно тебе там нужно), и при этом если всё сделать правильно вершины не улетают - что наводит на мысль, что ты какой-то простой вещи вроде столбцов-строк не знаешь.
По существу вопроса - если попросить людей с улицы выделить ключевую мысль твоего поста, то больше половину скажут что она в том, что ты пишешь свою perspective() и она работает не правильно, а визуализатор воспринимается как что-то второстепенное, предполагаемый путь решения проблемы. Выражайся яснее - "хочу побаловаться с матрицами и перспективами и мне нужен визуализатор" или что-то такое.
341 641732
>>641656
Чудес не бывает. Что-то у тебя неправильно.

Ищи что не так шаг за шагом.
- Проверь что матрица правильная на цпу (трансформируй с ее помощью углы фрустума, должен получиться куб).
- Проверь в графическом отладчике что твои вершины правильно идут на вход вершинного шейдера
- Убедись что константные (юниформные) буферы содержат то, что нужно
- Не используй view матрицу чтобы убрать лишний фактор, поставь камеру так как надо. Фрагментный/пиксельный шейдер сделай таким чтобы просто ставил цвет в белый.
- Отключи кулинг
- Посмотри выход вершинного шейдера в отладчике
- Поиграй с row major/column major

не забыл что четвертая координат вершины должна быть равна 1?
342 641768
>>638659
Какие сайты порекомедуешь для изучения?
343 641769
15233769823150.png137 Кб, 630x374
345 642316
346 643010
Господа, возник вопрос.
Вот есть например glUniform4fv и glUniformMatrix2fv, обе принимают uniform location и указатель на данные, count=1, transpose=false.
Вопрос эквиваленты ли эти функции? В плане и там и там в недра opengl передается указатель на 4 float'а. На моей нвидии все работает корректно, так ли это в других реализацих opengl?
Моя интуиция говорит, что таки да, тк по сути нужно скопировать 4 float'а куда то там, и плевать что по факту это разные типы.
Дело в том, что я использую Golang и рефлексию, а матрицы и вектора реализованы как одномерные массивы. И я могу только определить длину массива и выбрать функцию с подходящей длинной данных. Например при длине 4 - glUniform4fv, а при длине 16 - glUniformMatrix4fv
347 643734
>>643010
Гляди в сторону uniform buffer object
348 643735
https://alain.xyz/blog/comparison-of-modern-graphics-apis
Какая же шиза этот ваш опен гл, всё у него не как у людей. Ни доступа к устройству, ни к буфферу окна, ни свапчейна...
349 643743
>>643734
А чем этот ubo мне тут поможет?
Он вроде используется когда надо много uniform в шейдер отправить.
350 643760
>>643735
Opengl происходит из времен ктулху silicon graphics и пропитан ужасом древних
351 643806
>>643743
Он используется, чтобы не заставлять захламлять загружаемый в VRAM блоб
352 643811
>>643010
Соснешь с выравниванием на device side, если у тебя count > 1.
Гугли std140 и std430.
353 643823
чому во фрагментном шейдере может писать "Undeclared variable 'gl_Position'" если у меня его там вообще не было?
изображение.png3 Кб, 132x171
354 643991
А как курсор лучше делать? Текстуру на 2 треугольника, или лепить из треугольников?
355 643993
>>643991
два треугольника
356 644001
>>643991
Что за гейский курсор?
357 644003
>>644001
Ты ничего не знаешь о новых стандартах лгбт-геймдева?
358 644004
>>643993
А чем аргументируете?
359 644005
>>644004
Тем, что тебе нужно отрисовать всего два смежных полигона.
360 644010
>>644004
И ещё можно менять-кастомизировать курсор без изменения кода просто подменив текстуру, и не надо писать отдельный шейдер для отрисовки без текстуры но с цветами.
А десять разных курсоров вовсе неудобно в коде составлять из треугольников, особенно если они анимированные.
361 644011
>>644010
Ну что ты ему сразу все выдал)
362 644034
>>643993
Или даже один
363 644035
>>644034
Текстура всё равно будет прямоугольная. Хочешь ебаться с текстурными координатами?
364 644040
>>644035

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


Это геометрия уровня 7-8 класса, а то и раньше.
365 644045
>>644010

>и не надо писать отдельный шейдер для отрисовки без текстуры но с цветами


Во, кстати, а как обойтись только шейдером с текстурой, если нужно рисовать полигоны цветом? Создавать специальные текстуры в 1 пиксель с нужным цветом? Или на большой текстуре рисовать пиксель нужного цвета и задавать его текстурные координаты? А градиенты? Двух(и более)пиксельные текстуры?
366 644049
>>644040

> координатами


> Это геометрия


Ящитаю, это таки алгебра. Координаты же, Декарт и его друзья, икс, игрек, графики функций, уравнения, матрицы. Геометрия же оперирует циркулем и линейкой без координат.
367 644058
>>644045
Взять и сделать шейдер с цветом, это всё-равно очень быстро. Городить текстуру 1х1, попахивает костылём, особенное если создавать по текстуре на каждый из цветов.
Если необходимо сделать один шейдер - я бы сделал шейдер, который текстуру умножает на цвет - всё-равно скорее всего в коде шейдера будет умножение текстуры на цвет из-за освещения или ещё чего. В обычном режиме всё рисуется белым, а для твоего особого случая использует таки твоя текстура 1х1 без фильтрации.
368 644113
>>644040
Рисуй просто квад, как все нормальные люди это делают. Даже ебучии буквы квадами рендерят.
369 644178
>>644045
Передавай цвет как атрибут вершины и рисуй.
370 644319
Подскажите хорошую опенсорсную геометрическую либу по типу glm. Ну, чтобы были отрезки, плоскости, волюмы, пересечение, тесты всякие, вот это все. Есть такая? Самому писать западло.
371 644320
>>644319
Погляди на eigen. Он не то что бы про геометрию - он про линейную алгебру, но мне нравится. Я через него пересечения делал, быстродействие и выразительность куда устраивает.
372 644367
>>644319
https://github.com/microsoft/DirectXMath
Насколько я знаю, DirectXMath можно использовать независимо от самого DirectX. Там есть внутри DirectXCollision.h, возможно то что тебе надо. Плюс эта библиотека супер оптимизирована на SIMD (SSE/AVX инструкции).
373 644709
Посоны, я текстурку загрузил, координаты задал через вертексные атрибуты, даже в юниформ передал, на всякий случай, при рисовании делаю glBindTexture, glActiveTexture, а на выходе черный квадрат.
Сейчас проверить не могу, но такая мысль посетила - может ли это быть из-за того, что я не вызывал glTexParameteri? Или все равно должно что-то вывестись?
374 644726
>>644709
Ставь RenderDoc/Nvidia Nsight и проверяй какая у тебя текстура активна в данный момент.ъ

Плюс учти, если какие-то юниформы ты забыл задать или где-то есть касяк, шейдер будет выдавать ерунду. Особенности, да.

ЗЫ: номер текстурного блока для текстуры ты передал через glUniform1i ?
изображение.png17 Кб, 669x421
375 644775
>>644726

>ЗЫ: номер текстурного блока для текстуры ты передал через glUniform1i ?


Да, хотя, если правильно понял, это необязательно если текстура в шейдере одна.

>Плюс учти, если какие-то юниформы ты забыл задать или где-то есть касяк, шейдер будет выдавать ерунду. Особенности, да.


Вроде все задал, у меня был рендер треугольников/квадов с цветом, вот добавил текстуру и не вышло.

>Ставь RenderDoc/Nvidia Nsight и проверяй какая у тебя текстура активна в данный момент.ъ


Попробую, но я биндил и активировал текстуры прямо явно перед вызовом glDrawElements
376 644789
>>644709
>>644726
Ну в общем, дело было в glTexParameteri, убрал mipmapping, и текстура появилась. OpenGL видимо ждал, что будут еще и mipmap текстуры.
377 644818
Во сколько лет вы начали задрачивать графику?
378 644822
>>644818
Первую программу, в которой вращался трехмерный "проволочный" куб, я написал на спектруме на бейсике, лет в 14-15. Без всяких матриц, просто сложением-умножением координат на синусу-косинусы.
379 644872
>>644775
Это что за блядский язык? Go?
380 644873
>>644822
Столько лет прошло, но ничего лучше ты так и не сделал.
381 644874
>>644872
Он самый, после современных плюсов, как глоток свежего воздуха. Не идеальный, но приятный.
>>644873
Ну, я потом на ibm pc 286 сделал куб сферу, тор, sin(x)/x с закраской по Гуро
382 645013
>>644874
Я не родился наверно тогда еще
sha.png3 Кб, 380x164
383 645766
В тред призываются ванги.
Портирую прогу на андроид, а там сами понимаете gles.
Пробую хотя бы просто квадратик вывести (стек SDL2 + glad)
При компиляции вершинного шейдера выдает:
Undeclared variable 'gl_Position'
Сам шейдер на пике. Да я его компилирую как вершинный шейдер, гугл выдал единственное только про это.
384 645815
>>645766
Там какой версии ES: 2 или 3?
Попробуй написать attribute vec2 verPos и напиши #version 100 вместо текущего
385 645822
>>645815
>>645815
версия 3.1

после изменений теперь еще больше всего выдает:
E/SDL/APP: SHADER simple.vs: 0:1: P0007: Unexpected text found after #version directive
E/SDL/APP: SHADER simple.fs: 0:1: P0007: Unexpected text found after #version directive
L0002: Undeclared variable 'gl_Position'


мне бы просто пример работающий как на андроиде треугольник выводят на SDL2, потому что примеры, что находил подходящие либо не работают либо GL малой версии, где через GL_BEGIN и прочее
386 645824
>>645822
#version 300 es
in vec2 verts;

void main() {
gl_Position = vec4( verts, 0.0, 1.0 );
}

https://www.informit.com/articles/article.aspx?p=2181697 вот ссылку на книжку https://gofile.io/?c=aUbMn5
https://www.khronos.org/registry/OpenGL/specs/es/3.0/GLSL_ES_Specification_3.00.pdf
387 645825
>>645824
ну он говорит, что во фрагментном шейдере она не объявлена:
E/SDL/APP: SHADER simple.fs: 0:5: L0002: Undeclared variable 'gl_Position'
388 645826
>>645825
У тебя во фрагментном шейдере отсутствует 'colour'
Заебал, я же тебе ссылку дал на кусок из книжки, там есть пример с шейдерами
fs.png3 Кб, 340x126
389 645827
>>645826
Так устроит?
Я же пишу, что он на gl_Position ругается. В том числе как в примере по твоей ссылке.
390 645831
>>645827
Не вижу здесь никаких проблем.
Всё в порядке.
391 645832
>>645831
ну вот и я не вижу, если бы все было так просто как в примерах и учебниках
392 645833
>>645832
Ты весь остальной код сам писал? Или взял пример готовый и переделываешь под себя?
Найди рабочий пример с шейдерами который 100% соберётся и запустится.
393 645834
>>645833
весь остальной код там уже с готово работающего приложения, соответсвенно только SDL2 перевел на андроид, glad на es и сменил загрузчик его
шейдеры новые написал простые с 100% примеров и книг разные пробовал
т.е. сейчас на телефоне запускает окно SDL с контекстом 3.1 ES, закрашивает его через glClearColor, но сами шейдеры не работают вот с такой непонятной ошибкой
мне бы хоть логически допереть почему он во фрагментоном шейдере на gl_position ругается, в гугле такое встреччается, что если ты типа только например фрагментный шейдер компилируешь как вершинный, другого не нашел
394 645838
>>645834
https://github.com/danginsburg/opengles3-book
На собирай, проверяй.
И выкидывай тогда нахер sdl если с ним не работает.
395 645849
Аноны, че не так с текстурными координатами, почему текстура через жопу накладывается?
396 645852
>>645849
перепутал порядок точек
397 645859
>>645852
а каких?
398 645862
>>645859
а это уж сам проверь

смотри как первую тройку - которая у тебя за координаты точки, потом пару текстурных
лучше всего нарисуй себе на листочке, так понятнее будет
fan.png40 Кб, 391x228
399 645867
>>645849
Если ты через GL_TRIANGLE_FAN и таким массивом, то не факт вообще, что твоя ровная текстура так сможет встать.
Посмотри как он добавлять будет новые точки и представь какие текстурные координаты будут. Помни про то как обходятся точки еще на треугольнике.
400 645869
>>645867
Не могу сказать до конца, но из того опыта, который у меня был - опенгл вообще клал на то каким образом ты эти точки выводишь - текстура наложится одним и тем же
401 645873
>>645867
а через GL_POLYGONS, он вообще ничего не выводит, почему хз
402 645876
>>645873
Если у тебя не домашнее задание или лаба, а тебе надо гексагональную сетку с текстурами, то не надо тебе прямо рисовать эти гексы, рисуешь смещенную квадратную сетку, на нее опять же квадратную текстуру под гекс.
http://cyber-code.ru/гексагональное-поле/
1503709089120.png12 Кб, 643x67
403 645883
>>645876
Ну они у меня в массиве и рисуются
1577909158146.png6 Кб, 707x38
404 645885
>>645883
быстрофикс
405 645901
>>645867
>>645852
Короче суть в том, что не накладывается конкретное изображение, другое накладывается нормально
406 645981
>>645901
на первой картинке сама текстура и как она выводится на гекс
на второй - кусок кода, где задаются вершины и текстурные координаты и кусок из рендера на отрисовку по ним
(пропорции свои подставишь, которые нужны для нужной формы гекса)

скинь сюда оба твоих изображения, которое накладывается и которое - нет
407 646000
>>645981
Вершины такие же как здесь >>645849
1521540728494.png8 Кб, 353x140
408 646002
>>646000
Ток я их чуть поменял, чтоб хексагон все локальное пространство занимал
pic.png11 Кб, 484x510
409 646005
>>646000
все нормально с обеими картинками
ну там одна jpg, вторая png, может ты из в текстуру как-то криво переводишь еще до этого этапа
410 646006
>>646000
Ну судя по картинке твоей, то еще как выше тебе уже писали, что тебя у каких-то точен текстурные координаты не те задаешь
411 646260
>>550538 (OP)
А почему не с 2д начинать? Так проще же, любой новичок физически охуеет от вкатывания в 3д. Для начала надо 2д игру сделать, а потом уже в 3д.
412 646314
>>646260
кто мешает использовать 2d в openGL?
413 646349
>>646260
А че такого сложного в 3д? Матрицы перемножаешь да и делов то
414 646353
>>646349
Ладно матрицы, это ещё ничего, а вот кватернионы...
415 646365
>>646260
2д в опенгл - это частный случай 3д.
416 646371
>>646349
Наверное ничего, но когда в 2д попрактикуешься в написании, в структуре игры, то перейти в 3д будет проще.
417 646386
>>646371

>2д попрактикуешься в написании, в структуре игры


По секрету скажу, для этого даже графика не нужна, хватит набора команд
418 646528
>>646260
Если новичок знает линейную алгебру, то ему будет более-менее нормально сразу в 3d. Если не знает, то это не проблема opengl, а 2d игра не сильно поможет понять ему принципы всяких разных 3d штук.
419 646533
>>646528
Еблан?
Что толку от твоей математики, если он, например, не разбирается в форматах текстур, фильтрации, размещения атрибутов в памяти, банальная та же работа с блендингом.
420 646535
>>646533
А каким образом 3d игра помешает разбираться ему с фильтрацией и форматами текстур так же, как и в 2d игре? Что поменяется?

Если он знает линейку, то ему будут понятна перспективная проекция, и рендер в 3d не будет ничем отличаться от двухмерного, в чём он будет отдавать себе отчёт. Ты просто рисуешь двухмерные треугольники поверх друг друга во всех случаях.
Сложности могут быть только если он в октодеревья полезет, которые из линейной алгебры никак не следуют, и которые в 2d не потребуются с очень большой вероятностью.
421 646540
>>646535
А каким образом знания математики помогут ему сделать игру в 3д?
Помогут сделать модельки и их анимировать + текстуры?
Может поможет ему сделать нужный редактор уровней?
Игра это что перемножение пары матриц для перемещения объекта по экрану?
422 646545
>>646540
Таким, что 3d игра для него не принесёт никаких трудностей в изучении opengl по сравнению с 2d игрой. Разговор был о том, на чём учиться вроде бы, а не про анимации и текстурки.

Объективно трёхмерные игры намного сложнее конечно, но не за счёт opengl - его то как раз без разницы где использовать.

>Помогут сделать модельки и их анимировать + текстуры?


>Может поможет ему сделать нужный редактор уровней?


Да, в обоих случаях и очень сильно. Просто представь как человек не знающий математики будет делать редактор трёхмерных уровней или реализовывать условную костную анимацию.
423 647319
>>646260

> Так проще же, любой новичок физически охуеет от вкатывания в 3д. Для начала надо 2д игру сделать, а потом уже в 3д.


Неверное утверэжение.
424 647481
>>646260
Ну знаешь для 2Д тоже надо какие никакие знания. Поэтому я бы посоветовал начать с томов по линейной алгебре, таких как Кострикин, Беклимешев. Выуччить все теоремы на зубок чтоб отлетали, решить пару задачников прилагающихся, затем пару раз все перечитать, чтоб ниче не забыл, и только потом открыть вводный учебник по CG, например Порева. Тоже все прочитать и выучить каждый параграф, затем открыть какой-нибудь толстый учебник со всеми основными алгоритмами по CG, выучить каждый наизусть. Затем прочитать red book opengl и cook book по шейдерам. Затем вернуться к теоремам из первых двух учебников и перечитать их все заново и доказать заодно, так как повторение мать учения. Еще раз пройтись по Пореву, red book, шейдерам и только затем начать туториал learnopengl на хабре и начать писать непосредственно код.

И да, если собираешься игры делать, прочитай перед learnopengl пару книг по архитектуре игры, паттернам, сетям и сокетам, а затем пройдись еще раз по началу и вот тогда приступай к туториалу.
425 647490
>>647481
Ты забыл сказать про полупроводники, транзисторную логику, затем разработать собственный микроконтроллер, написать к нему микрокод. Потом ассемблер современных процессоров, написать собственный компилятор языка высокого уровня с оптимизатором. Ну и про знание архитектуры современных процов и гпу, кэша, конвейера, векторных команд я вообще молчу.
426 647500
>>647490
Ну это база. Придет такой студенишка на собес на программиста по графике, а ему с порога дадут паяльник и пачку светодиодов и скажут, ну нарисуй че-нибудь
sage 427 647501
>>647481
>>647490
>>647500
Не забывайте, что без советского диплома программиста вы не имеете права делать игры.
428 647527
>>647481

>Выуччить все теоремы на зубок чтоб отлетали


>перечитать их все заново и доказать заодно


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

Не будет ли полезнее почитать про lup-разложение, которого не будет в курсе линейной алгебры, но которое будет куда более полезно, если ты сам пишешь хоть что-то вычислительное? Книжку по "прикладной линейной алгебре" без доказательств, где приведены полезные вычислительные методы подходящие для компьютеров, с учётом алгоритмической сложности и погрешности чисел с плавающей запятой, а не абстрактная фигня в вакууме, которую можно посчитать только с применением символьных вычислений, потому что во всех остальных случаях там накопятся погрешности громадных размеров?

>>647490

>про знание архитектуры современных процов и гпу, кэша, конвейера, векторных команд я вообще молчу


А вот это ты зря. Про кеш стоило бы знать, про векторные операции, про то что деления (даже целочисленные) занимают в 10 раз больше тактов, чем умножения или сложения и всё в таком роде.
А то я видел код, где по двумерному массиву был цикл, а индексы считались как i%s и i/s, типа оптимизация, один цикл вместо двух, меньше операций.
Или кто-то может подумать, да какая разница будет у меня какая-то вспомогательная структура данных с индексами и разбиениями пространства на 8 мб или на 1 мб - а там этот 1 мб умещается в кеш, и даже если в методе с 1 мб производится в два раза больше вычислений - он всё-равно может работать быстрее метода с 8 мб, даже если в нём меньше вычислений.
429 647530
>>647527
Я не тот анон, но пару мыслей изложу.
Доказательство стоит знать (а лучше уметь придумывать самому) хотя бы потому, что без него на самом деле теорема нихуя не понятна.
Тебе, может, кажется, что ты там что-то понял, но пока ты сам не в состоянии поставить задачу и разъебать её полностью самостоятельно, исходя из первых принципов, то нихуя ты вообще не понял.
Тебе не понятна постановка задачи -- что на входе и что на выходе, чётко и формально. Не понятно, как оно там перемалывается внутри, за счёт чего оно ваще работает. Нет свободы прикладывания этой теоремы -- можешь приложить только по аналогии. А как только всё становится ясно, теорема перестаёт быть чёрным ящиком и становится более-менее элементарной вещью, практически частью тебя. Плюс её понимание немного расширяет твои способности воспринимать остальные вещи, но это уже про кругозор.
А про чтение каких-то книг -- всё это хуйня. Стоит разве что знать о существовании всего этого добра, но никак не заучивать всё заранее. Естественный режим изучения нового -- это по нужде. Пригодилось -- разобрался. Это если тебе просто что-то там нахуярить надо.
Вот если по-серьёзному разбираться, то да, с нормальным знанием теории всё становится понятно гораздо быстрее и надёжнее, но это, конечно, сильно трудозатратнее.
Легко говорить, когда теорию уже знаешь (как я), ну, в вузе не проёбывался, например. А для незнакомых с ней людей, это, наверное, ёбаный ад.
430 647533
>>647530
Ну вообще хорошо спортом заниматься. А то мы вот сидим, сутулимся, света не видим, плохо питаемся, это все сказывается на здоровье и, соответственно, на мозговой продуктивности.
Еще иностранные языки полезно изучать, развивают память, заставляют мозг мыслить гибче.
Ну и философию с логикой желательно не пропускать, иначе как проектировать код, если не знаешь как разделить ответственность между классами и т.д.?
Короче все надо знать, геймдев это не хуе-мое, тут спецназовцем надо быть.
431 647534
>>647533
Вот ты вроде рофлишь, а я реально всем этим занимаюсь. Ты как будто целился, ебать.
Да дело не в геймдеве, а вообще в компетентности специалиста. По-хорошему, надо много потеть и дохуя знать. Но мы не в идеальном мире, поэтому довольствуемся сегодня тем, что есть, и думаем о завтра.
432 647554
>>647481

> вводный учебник Порева


порнохаб же есть
433 647562
>>647534
Я к тому, что сверх-человеком быть хорошо. Но иногда для достижения какой-то цели можно обойтись и меньшей кровью. Мб челу вообще геймдев не понравится.
С другой стороны, чем позднее захочешь углубляться в тему, тем труднее все будет заходить. Надо соблюдать баланс, иначе можно застрять во всех этих теоретизированиях, потерять нить и вообще разлюбить дело.
1428817424835.png18 Кб, 859x120
434 647994
Ахуительно
435 647999
>>597091

>плюс этот треугольник будет работать только на топовых видеокартах.



Совсем ебо-бо. На каких топовых видеокартах. Начиная с кеплера все поддерживается.
https://en.wikipedia.org/wiki/Vulkan_(API)#Compatibility
436 648112
SDL_PollEvent отдельный поток себе создает?
437 648577
Есть ли способ заранее скомплить шейдеры или хотя бы обфусцировать, чтобы игрок например не смог убрать туман войны закоментив одну строчку в шейдере?
438 648579
>>648577
Ты что, в рантайме грузишь шейдеры из текстовых файлов? Совсем ебобо?
Это васянство уровня туториалов nehe 2002 года.
Можно компилить в байткод заранее, на этапе разработки, полученные байты вкомпиливать прямо в экзешник, чтобы никто там ручками не ковырялся.
439 648678
>>648579

> Ты что, в рантайме грузишь шейдеры из текстовых файлов? Совсем ебобо? Это васянство уровня туториалов nehe 2002 года.


Самый нормальный подход для сингловых игр и клиентских модов мультиплеерных.
440 648765
>>648577
Проверять целостность файлов перед запуском

Да и вообще, туман войны (который игрок видит на экране) по идее это чисто визуальный эффект который не должен напрямую скрывать всё.
Я имею ввиду то, что, скажем, юниты и постройки не должны рисоваться если они находятся вне поля зрения противника.
441 648886
>>648765
Здесь немного другое. Ты вроде и должен видеть игрока, но сквозь fog реально ты его очень плохо видишь
442 648918
>>648577
Вроде как есть тулза reshade, которая позволяет заменять шейдеры в любом приложении. Она перехватывает вызовы OpenGL, и подменяет текст шейдера.

А так, вшивай шейдер в код, или юзай цифровую подпись. Это тоже ломается, но не так просто.
443 648919
>>648579

>Можно компилить в байткод заранее, на этапе разработки


В OpenGL-то?
444 648921
>>648919
Может быть он имел в виду SPIR-V
445 648951
Мне кажется, что ОпенГЛ это рак. Пруф ми вронг.
будущее за софтрендерами

Почему он по-разному работает на разных машинах? Это ненормально в 21-м веке. Алгоритм должен быть выше хардвейра, это же разные слои абстракции.
446 648989
>>648951
Вероятно, у тебя баг и этот баг работает по-разному
opengl.png48 Кб, 1920x1080
447 652555
Вопрос по текстурированию. У меня для ускорения наложения текстур все они хранятся в одном файле по сути аналог тайлсета, и в шейдер при рендере передается лишь смещение по координатам, что отменяет необходимость переключатся между текстурами. Но при этом возникает проблема - а именно швы как на пике, так как одна часть текстуры может граничить с другой, и из-за этого происходит их смешивание. Есть возможность как-то победить такой шов?
448 652581
>>652555

>Есть возможность как-то победить такой шов?


хехе, так тебе его не побеждать надо, а ИСПОЛЬЗОВАТЬ. не баг, а фича.
разворачивай свой кубик так чтобы он был в одном чанке, и текстурки будут гармонично перетекать по швам
449 652588
>>652581
В том то и дело, что у меня используется одна текстура, из которой при рендере берутся данные со сдвигом. Из-за этого при рендере тайла из текстуры берется соседние значения, и если соседний тайл сильно отличаются по цветовой гамме (берем зеленый, а к нему примыкает красный, к примеру), то на краю текстуры будет смешивание красного и зеленого.
450 652604
>>652588
при твоем подходе ты никак не сможешь это победить, разве что отключив мипмапы/фильтрацию текстур. ну или отступ делай между квадратиками.
так почему так вышло что у тебя используется одна текстура, а у всех нормальных людей несколько?
451 652612
>>652604

>ну или отступ делай между квадратиками.


Скорее всего остановлюсь на этом.

>так почему так вышло что у тебя используется одна текстура, а у всех нормальных людей несколько?


Я использую instanced arrays (передавая данные через вершинные атрибуты), и сделав glBindTexture с тайловой текстурой, передаю в сотни тысяч кубов лишь требуемые координаты для рендера и смещение на текстуре. Ну и захотелось реализовать тайлинг, который примерно как в 2D используется.
452 652632
>>652555
Закинь свои текстуры в texture array. А в шойдере читай из него.
453 652638
>>652604

>а у всех нормальных людей несколько


Текстурный атлас не то же самое разве?
454 652686
>>652638
не совсем, алсо, у авторазверток для лайтмепов та самая проблема имеется, особенно на низких разрешениях.
455 652827
>>652555
Можешь хранить текстуры в атласе с отступом, но могут возникнуть проблемы с мипмаппингом
456 664301

>https://www.khronos.org/opengl/wiki/Blending


>Blend Equations


По какой причине я не могу в фрагментном шейдере или ещё где настраивать по какому уравнению смешивается уже имеющийся цвет с новым?
457 664328
>>664301
Внутренние оптимизации, очевидно же.
А так можешь сделать шейдер со своим "смешиванием", почему бы и нет. Учитывая только, что читать и писать в одно и то же место нельзя.
458 664525
>>664328
Если внутренние оптимизации, то вообще странно что существуют шейдеры. Там скорее из-за атомарности и неупорядочнености записи проблемы, а не ради оптимизаций.
Только один слой, не подходит.

>Учитывая только, что читать и писать в одно и то же место нельзя.


В ssbo же можно вроде как без особых проблем.
459 664794
>>550538 (OP)
Ебаться с вулканом уже пытались? И как успехи с ОпенГЛ, есть хоть что-то красивое, более одного треугольника? Кто-то осилил отрисовывать STL?
460 664921
>>664794

>Кто-то осилил отрисовывать STL?


Что это? Не библиотека шаблонов же, лол.
461 665027
>>550538 (OP)
Когда можно ожидать прекращение поддержки опенгл? Стоит ли сейчас начинать его учить?
462 665131
>>665027

> Когда можно ожидать прекращение поддержки опенгл?


Никогда

> Стоит ли сейчас начинать его учить?


Учи

С чего бы ему пропадать?
463 665136
>>665131

>С чего бы ему пропадать?


Все перейдут на вулкан.
464 665147
>>665131
Не пиши больше про графику, плиз. OGL мёртв, точка.
465 665671
>>665136
>>665147
Если ты начинаешь сразу с Вулкана, и до этого никогда с графикой не программировал, то ты соснешь лошадиный хуй.
466 665709
>>665671
А с опенгл на вулкан легко будет перекатиться?
467 665827
>>665709
легче, чем без
468 668026
>>647481
Бля чувак. Все не так. Я не спорю что линейную алгебру нужно знать, но это так не изучается. Нужно поставить себе задачу и начать писать код, и уже по ходу учиться, все это чтение и зубрение ничего не стоит без практики, а практика и теория за ней, познается тогда, когда решаешь интересные комплексные задачи, где одна микрозадача плавно перетекает в другую, а не очередной унылый задачник.
469 668033
>>668026
А вот как, например, решить как действовать когда нечто неизвестное перед тобой?
Например, применение скалярного произведения\перед из одной системы координат в другую
Можно всякие йобы делать из этого. А если не знать что так можно (фантазия + знания тут нужны), то будет городить всякие велосипеды на десятки строк.
470 668067
>>668033
всегда можно спросить у анона
471 668071
>>665136
А какой охват вулкана сейчас по железу?
Работает на встройках? На старых компах?
Вот сделаю я 2д игру на вулкане, допустим, а она запускается только на топовых видюхах. Это же не норм для 2д игры, она должна и на некроноутах 10 летней давности работать.
472 668075
>>668071
Работает везде, в отличии от ОпегГЛ
473 668306
>>668075
Не пизди. Нвидия поддерживает Вулкан только с 600-й серии.
474 668312
>>668306

>600-й серии


Это какого года выпуска? Только у нищуков осталось, которые неплатежеспособны.
475 668367
>>668312
ох уж эта категоричная школота..
476 668368
>>668306
была 550ti, запускал на ней дум 16 под вулканом, было 20 кадров
477 668369
>>668368
уточню что разрешение экрана было мелкое + все на минимум, 550ti покупал в 11
478 668400
>>668367

>обзывалки вместо аргументов


ох уж эта категоричная школота..
479 668422
Софтварного рендерера под вк реально не хватает. Есть mock icd, типа null-driver, но это не совсем то.
480 668462
>>668368
В Дум 2016 на релизе был только OpenGL. Позже патчом добавили Вулкан как опцию. Ты уверен, что ты не на OpenGL играл?
481 668483
>>668462
посмотрел поддержку, пишут что с 600 серии идет.. мб я и напиздел, но помню что ставил в меню вулкан и игра перезапускалась, проверил бы сегодня, только уже давно обновил железо
482 668511
Ну ок, допустим, решил я изучать опенгл, на каком языке это лучше делать. На C/C++ не хочу.
483 668514
>>668511
Бери любой язык какой захочешь
484 668703
485 668707
когда в шейдерах пишут такое:

layout (location = 0) in vec2 bla
layout (location = 1) in vec2 blabla

то конструкция layout (location = N) всегда лучше писать или как с ней правильнее работать?
потому что в каких-то случаях работает и без нее, в каких-то можно убрать у некоторых и ничего не меняется..
486 668738
>>668707
Да, стоит писать, иначе тебе под эти компоненты (позиция, цвет, текстурные координаты, нормали и тд) придётся получать индексы, а если заранее определиться что к какому индексу относится, то не ошибёшься.
https://pastebin.com/raw/9UnT1Shu пример
487 668896
>>668707
пиши. вроде и AMD даунов оно не на всех видеокартах работает. И в каких-то драйверах кто-то шибко умный решил пооптимизировать, и меняет порядок лайаутов (сталкивался с обоими проблемами)
488 669761
>>668896
Компилятор в таком случае сам определяет порядок ради оптимального выравнивания, так что даун здесь только ты.
489 669882
glEnableVertexAttribArray
glDrawArrays
glDisableVertexAttribArray

если в основном цикле для каждого объекта не каждый раз подключать и отключать все его вершинные атрибуты, а в начале все оставить Enable, то чем это грозит? когда много объектов, то может произойти переполнение чего-то?
490 669896
>>669882

> для каждого объекта не каждый раз подключать и отключать все его вершинные атрибуты


Достаточно одного раза Enable и всё
491 669901
>>669896
так одного когда: каждый цикл отрисовки или один раз, когда объект создаю и его буферы загружаю?
492 669916
>>669901

> когда объект создаю и его буферы загружаю


Так
493 669949
>>664921
Формат файла 3д графики, а именно мешей. По факту просто набор координат несвязаных вершин треугольников, лол
494 671158
Ананасы, напомните где начинается координатная система (для 2д случая): слева-вверху или слева-снизу?
495 671441
>>671158
Можно сделать где угодно, хоть в центре. А практичнее, по мне так, слева вверху.
496 671795
>>671158
Если прямо вообще ничего не делаешь, то по умолчанию у тебя центр координат в центре экрана. А в углах экрана от [-1,-1] до [1,1] не зависимо от разрешения и размера.
497 672089
>>671158
Нет 2d случая. Есть normalized device coordinates.
498 673789
>>671441
А почему не как на тетрадке, где график рисуется слева снизу?
499 673824
>>673789
Скорее всего так исторически сложилось. Ну и типа осциллографы, где x/y это напряжения на отклоняющих пластинах - думаю идея от них заимствована, где нулевой сигнал лежит в центре. Это же вообще не важно, верно?

Меня больше бесит перевёрнутая ось y в виндоусе (и в opengl). Это конечно связано с тем, что текст в консолях сверху вниз писался, но всё-равно бесит каждый раз писать height-1-y во всех обработках мыши или ещё чего.
500 673906
>>673824

>Это конечно связано с тем, что текст в консолях сверху вниз писался


Это связано с тем, что в кинескопе луч обегает строки сверху вниз.
501 673932
>>673906
А еще может потому, что экран эта матрица с конечными значениями, а не система координат RxR, а в матрице, как мы знаем, элементы отсчитываются сверху слева
502 673970
>>673906
Это связано с тем, что большая часть текстов пишутся сначала буквы вправо, а потом строки вниз.
>>673824

>и в opengl


в glOrtho значения местами поменяй и будет как ты хочешь.
503 674112
>>673970

>2020


>glOrtho


Лол
504 674181
>>674112
> Вулканоблядок не желает, чтобы кодили на легаси

> МАМ НУ СКАЖИ ИМ


> Кукарекает вулканоблядок
505 674244
>>673970

>в glOrtho значения местами поменяй и будет как ты хочешь.


Я про то что если ты в вершинном шейдере напишешь gl_Position=vec4(-0.9, -0.9,0,1) без преобразований - то это будет будет левый верхний угол, а glOrtho - это уже умножение на матрицу по умолчанию.
Ладно, на матрицу всё-равно почти во всех случаях надо домножать, потому мне не в падлу преобразовать матрицу предварительно.
506 674248
>>673906
Не только в кинескопе. Нынешние LCD мониторы тоже рисуют картинку по строкам сверху вниз.
507 675373
>>674181
вмешаюсь: а вулкан-то здесь причем?
Если ты делаешь движок для 3д игрулины, то определенно следует использовать VBO и шейдеры т.е. в приниципе OpenGL >= 2.0.
Если не делаешь - тогда зачем вприниципе в ogl полез, раз в твоей игре производительность графики не важна? В куче движков реализовано API поточечного рисования, зачем делать это наиболее низкоуровневым способом через ogl?
508 676116
Что почитать полному нулю в OpenGL?
509 676193
>>676116
Переводы на хабре
510 678283
>>675373
Как вообще связаны ортографическая проекция, вулкан и VBO? И чем плоха проекция в 2020? Вы че то смешали в кучу коней, людей, как по мне.
511 678284
>>676116
Есть отличный сайт learnopengl.com, который правда попал под банхаммер РКН, но как тебе уже ответил другой анон, есть переводы его на Хабре, полностью. Оглавление не полное в первой статье, дальше появится уже полное.
512 679116
Объясните ебанутую систему выбора типа памяти для буферов в этом вашем ГЛе. Нужно подобрать соответствия для { gpu_only, cpu_only, gpu_cached и cpu_cached }. Такое чувство что наркоманы писали спецификации - какие-то статик дроу/динамик дроу. Хуй проссышь что это такое на самом деле.
513 680390
>>679116
Не очень тебя понял, надеюсь ты об этом.
Эти маркеры подсказывают чего юзер собирается делать с данными буфера:
DRAW - только запись в буфер, без чтения
READ - юзер не будет записывать данные, но вычитывать - будет
COPY - юзер не собирается ни читать, ни писать в буфер (для проброса данных порождаемых самим пайплайном)

И хинты по частоте осуществления операций юзером
STATIC - данные устанавливаются юзером однажды
DYNAMIC - периодически
STREAM - данные будут обновляться (почти) после каждого использования
514 682596
>>678283
Проекция - это вещь в себе. Но в вулкане она вверх ногами перевернута по сравнению с OGL. Поэтому приходится исправлять

VBO - это тоже вещь в себе. Но существует и в OGL и в вулкане. Но есть методисты, которые хуярят по старым методичкам и в 2020-м пользуются Intermediate mode и FFP. За что нужно отрывать руки
img.png56 Кб, 408x365
515 683415
Как правильно смешивать текстуры в шейдере? Если вот одна из них полностью непрозрачная, а другая имеет прозрачные места, то тот же mix(tex1,tex2, tex2.a) дает артефакт в виде белой границы, где вторая текстура наложена на первую.
516 683443
>>683415
Разберись сначала с темой альфа-блендинга. Вот хорошая статья, которая описывает твою проблему https://habr.com/ru/post/328386/
517 683637
>>683443
Благодарю, помогло
518 683761
>>683637
Не благодари
terrain.png79 Кб, 256x256
519 684125
>>652612

>>ну или отступ делай между квадратиками.


>Скорее всего остановлюсь на этом.


Но ведь в майнкрафте нет отступов между квадратами? (пикрил выдрал из версии 1.0)
520 684144
>>684125
В майнкрате текстуры рендерятся без слглаживания
521 684206
>>684125
А можно ещё сгенерировать мип-мапы вручную, "размывая" внутри отдельной текстуры и не проходя сквозь границы прямоугольников в текстурном атласе. И установить ограничение на уровень мипмапа тоже вроде как можно, чтобы когда размер текстуры меньше чем 1 пиксель он не прыгал на уровень выше, где 4 текстуры будут замешаны в одном текстеле.
522 684375
А где лучше всего изучать GLSL? Хочется постепенно, с самых азов...
Пока что для меня команды в GLSL-коде выглядят как очень сильное колдунство(

...вот как раз заодно... Вкручиваю в свой код шейдеры, падение на glShaderSource()...
Думал, я как-то неправильно передаю строки, но на glGenVertexArrays() тоже падение...
Самое отвратительное - падение без каких-либо ошибок, даже EAccessViolation нет((
523 684390
Может я >>684375 как-то неправильно OpenGL перед работой с ним настраиваю?
Есть ли какие-то отличия в настройке для работы с 1.1 от работы с 2.0+/3.0+?
524 684656
Похоже я прав, >>684390

>я как-то неправильно OpenGL настраиваю


Т.е. OpenGL 3+ настраивается иначе, чем OpenGL 1+.

В связи с этим вопрос - что такое wgl и где его найти?
Я хочу инициализировать окошко OpenGL 3+, не подключая ворох сторонних dll-ок.
525 684662
Блин, тред уже перекатили, а тут не сказали... >>678945 (OP)
526 684722
>>684656
Там какая-то шиза, по типу что сначала тебе нужно создать контекст версии 1.1, а потом с его помощью пересоздать новые 2/3/4 версии.

Чтобы использовать glShaderSource и другие функции молодых версий opengl не обязательно создавать контекст новой версии. Можно создать 1.1, и рисовать геометрию для шейдеров через glbegin/glend. Или можно написать один шейдер версии 460 core, а другой 110 и они вместе будут работать с общими varying переменными - оно что угодно почти стерпит. Если ты не про мобилки, конечно.
Перекат 527 684869
528 697837
Че заюзать для окна, если я хочу попрогать на чистом OpenGL 1.1 (я делаю псевдоолдскул). При этом минималистично, но кроспратформенно.

SDL слишком громоздкий. Нужно только чтобы окошко создавало и клаву читало
529 707188
>>550538 (OP)
аноны стоит ли учить старый OpenGl (OpenGL 2.1)?Есть книжка . Насколько это устарело?
530 712497
>>564755
Меряй, вообще сильно же зависит от размеров буфера, данных, количества вызов. Лично я бы сделал сначала 2 вариант если соотношение выше выглядит разумным. Так как в 1 скорее всего драйвер с немалой вероятностью какое нибудь говно на хосте будет держать. И превращать твой 1 вариант во 2
531 712500
>>707188
Скачай новую книжку в чем проблема зачем учить легаси которое юзают только чтобы на древнем говне запускалось?
532 715123
Изучаю SSBO и не понимаю как можно найти смещение массивов, например как найти смещение массива arr2?
layout (std430, binding = 5) buffer BlockSSBO1
{
vec4 arr1[];
vec4 arr2[];
};
изображение.png3 Кб, 211x132
533 715261
>>715123
А это точно запускается? Там вроде бы только один массив может быть без размера, и скорее всего он должен быть последним.

Я не особо их трогал, но для вычислительного шейдера я вот так вот делал и это точно никаким явным образом нельзя было написать в виде одного буфера.
534 715300
>>715261
Я тоже удивился когда данный код перестал работать на GF1060, хотя два динамических массива в одном блоке SSBO прекрасно работали на Intel HD Graphics. В общем пока использую три блока с один динамическим массивом в каждом, но вопрос вычисления смещения переменных открыт, пусть даже для статических массивов.
изображение.png4 Кб, 357x195
535 715317
>>715300

>прекрасно работали


Интересно как они работали, если ты спрашиваешь как смещения высчитывать.

>но вопрос вычисления смещения переменных открыт


Что тебе мешает написать:
{
int offset;
vec4 arr[];
}
И к первому обращаться как arr<i>, а ко второму как arr<i+offset> - если ты в самом деле хочешь два куска данных разного размера в одном буфере, размер которых определяется в рантайме?

На SO вовсе приводят такой код, будто там есть метод length. Я не пробовал - всегда в отдельных переменных сам размер передавал.
536 717777
У меня вопрос, допустим нужно нарисовать тайл пик1 без сглаживания. Если его рисовать методом обычного спрайта в виде квадратной сетки вершин, то он рисуется нормально, если же сетка вершин будет подогнана под форму, то на краях образуется сглаживание пик2. Вопрос как сделать чтобы нормально он рисовался без сглаживания? Сделать сетку на 1 пиксель больше? И вообще интересно насколько оптимизация по форме спрайта влияет на производительность?
537 723664
хочу нарисовать простые крестики нолик, никакого 3d. Что можно для нубов почитать чтобы быстро вкатиться?
538 723914
>>723664
В зависимости от языка.
Ты хочешь крестики-нолики, или именно крестики-нолики через opengl?

Для с++ sfml и справка к нему (можно обойтись вовсе без использования функций opengl), для с++/си sdl и справка к нему. Можно древний opengl 1.1 и пример из redbook (в следующем седьмом треде один из последних постов), но это намного сложнее - так как даже надпись текста ты не выведешь без некоторого вникания.
Для питона есть pyglet/pygame - там (вроде бы) можно обойтись без вызовов opengl, так можно и с ними, и есть кучка других графических либ.

Задача на 0.5-5 часов, в зависимости от уровня знакомства с программированием, от языка и выбранной либы, от степени понимания концепций обработки событий клаво-мышки и работы программы в реальном времени. Я точно не знаю, но на каком-нибудь html5/js заточенным под интерфейс это (скорее всего) делается за 15 минут с нуля вообще без знаний веб-программирования - достаточно просто посмотреть на синтаксис языка, загуглить "как нарисовать кнопку (с картинкой)" и "как по нажатию мышки изменить картинку другой кнопки/сделать что-то".
539 723972
>>723914
под ведроид хочу. Умею рисовать на canvas, но там отрисовка в ui треде, и ничего сложного не нарисуешь
540 727333
>>625941
Начинать лучше всего со своего софтвеерного рендера.
>>626851
Ты никак не сможешь визуализировать кватернионы. Если тебя мучает, откуда взялась таблица их умножения, то ответ: просто пришла в голову Гамильтону.
Есть такая бесполезная микронаука geometric algebra. Бесполезная всмысле никаких новых результатов она не дает. Но она хороша для описания движений в n-мерном пространстве. В частности кватернионы в ней определяются шаг за шагом, и таблица получается логично обоснованной.
Правда никаких хороших текстов по ней нет. Можешь попробовать разобраться сам. Желательно перед этим знать что такое внешнее умножение.
541 727712
>>648951
Шиз, ты бы хоть написал как текст выводишь.
542 727887
>>727712
Да забей, он просто забыл указать glPixelStorei(1), и потому когда он загружал куски текстуры с символами размером не кратные 4 (значение по умолчанию, вроде бы), то получал артефакты по краям.
543 732022
>>727887
У меня так было както, бтв логичнее размер текстуры подогнать
544 732023
>>727887
Хотя у меня это выглядело как то что буква наклонена, ну я атлас делал офк
.png369 Кб, 1272x851
545 732375
Гейдач, поясни за эту книгу. Она чисто для математики, или OpenGL тоже касается? Полистал, создание окна аж на 259 странице из 373.
546 732484
>>732375
Предложу перейти в следующий тред: >>678945 (OP)

Я сюда захожу просто потому что он в избранном остался и тут мои сообщения в конце и про эту книгу я не слышал.

Нет никакой необходимости читать целую книгу конкретно про opengl - нужно читать математику эффектов которые ты хочешь получить, и иметь краткое представление возможностей видеокарт, что работает хорошо, а что не очень (условные переходы в шейдерах, например).
Например, вот в таком виде есть уже почти всё что тебе нужно: https://www.khronos.org/files/opengl46-quick-reference-card.pdf
Когда тебе нужно что-то конкретное, ты просто смотришь описание нужного тебе расширения или гуглишь демки, если сам не осиливаешь.
А вот про кватернионы, линал, однородные координаты или физику DoF по какой формуле степень размытия (точнее, сам ход мысли как такие формулы выводятся - и в каких местах можно и нужно сложный корень или экспоненту заменить на интерполяцию квадратичной функцией или какое-нибудь разложение тейлора) можно и поподробнее прочитать.
Это не точно, но я почему-то уверен, что открою api directx и почти сегодня же сделаю что мне потребуется так же как и в opengl.
547 732631
>>732484
Аригато за совет, особенно за https://www.khronos.org/files/opengl46-quick-reference-card.pdf

> Предложу перейти в следующий тред: >>678945 (OP) (OP)


Разве в gd бамплимит не 1000 постов?
548 732633
>>732631

>Разве в gd бамплимит не 1000 постов?


Седьмой тред на нулевой, шестой на восемнадцатой странице.
https://2ch.hk/gd/18.html (М)
549 741382
Блядь, я уже весь изъебался нахуй! Есть какой-то нормальный фреймворк с окошками, шоб и устанавливалось все искаропки без последующей ебли с линкером, и документация была написана палюццки?! А то шото я покашо ни с freeglut, ни с flgw не подружился...
550 741383
>>741382
glfw
фикс
551 741384
Ебать, ну шо за магия? Два часа ебался, а стоило пукнуть в тред, и мозг все сделол...
sudo apt install libglfw3
clang -o test test.c `pkg-config --static --libs glfw3`
552 741434
>>741384
Красноглазая жизнь.
553 741495
>>741434
Лучше скажи, почему не завезли нормальный хедер, шоб его раз заинклудить, и не было implicit declaration of glCreateShader. Почему нельзя обойтись без всякой магии с glew? Я ебал эту хуйню использовать вообще!
554 741496
>>741434
Сука блядь нихуя у меня с этим glew не получается. Какие экстеншены нахуй?!?!! Не барское это дело каким-то легаси-толерантным путем идти. Я хочу просто c core profile работать, сука, и шоб все было на месте искаропки! Какова хуе include glcorearb не помогает?!
image.png19 Кб, 640x505
555 742029
ебать треугольники рисую кста
Тред утонул или удален.
Это копия, сохраненная 31 июля 2021 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /gd/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски