Войти
ПрограммированиеФорумГрафика

Glsl от вершинного к фрагментному. (2 стр)

Страницы: 1 2 3 Следующая »
#15
21:41, 28 мар 2017

foxes
> Минимум для одного треугольника, но не для шейдера, он не считает треугольники,
> это лишь часть обработки данных.
foxes
> Фрагментный шейдер ни чего не построит, он просто обработает конечный пиксель,
> это фильтр для данных.

Так что происходит то внутри ? Как там что фильтруется. Реально не пойму ?

Вы извините что я докопался но мне надо въехать))

Как fs нарисовать градиентную линию ? Что должно быть в vs для этого ?  (в 2D системе координат)


#16
21:44, 28 мар 2017

vito-Z80
> Как fs нарисовать градиентную линию ? Что должно быть в vs для этого ?  (в 2D
> системе координат)
Для этого тебе шейдеры не нужны. Нужно просто задать две вершины с разными цветами, и задать форму геометрии "линия".

glBegin(GL_LINES);
glColor3f(1.0, 1.0, 1.0);
glVertex2i(250, 450);
glColor3f(0.0, 0.0, 1.0);
glVertex2i(250, 150);
glEnd();
#17
21:48, 28 мар 2017

foxes
> Ты когда обычно рисуешь пиксель на экране выполняешь команду на подобии
> SetPixel(10,10,green); - реализация SetPixel это и будет фрагментный шейдер.
То есть у этом случае в vs ставится заглушка ?

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

foxes
> glBegin(GL_LINES);
> glColor3f(1.0, 1.0, 1.0);
> glVertex2i(250, 450);
> glColor3f(0.0, 0.0, 1.0);
> glVertex2i(250, 150);
> glEnd();

это OpenGL ?

Ок, если можно писать на OpenGL(вообще не знаю, не знаю даже больше чем не знаю glsl), зачем тогда glsl ?
короч я запутался...

#18
21:53, 28 мар 2017

vito-Z80
> То есть у этом случае в vs ставится заглушка ?
Ну вроде того. В данном случае "SetPixel(10,10,green);" результат после расчета проекции координат вершины на экран, будет gl_FragCoord=vec4(10,10,0,1);

vito-Z80
> Так а рисовать то мне кто их будет ? мне же к через видюху их рисовать надо как
> к ней обращаться без шейдеров ?
Все в статье описано.

vito-Z80
> это OpenGL ?
да

vito-Z80
> зачем тогда glsl ?
для создания дополнительных эффектов, больше возможностей для обработки данных при помощи видеокарты. Например превратить квадрат из примера в снежинки.

#19
22:06, 28 мар 2017

Если glsl расширяет OpenGL, то в glsl можно сделать все тоже самое что и в OpenGL и даже больше ?

foxes
> Для этого тебе шейдеры не нужны. Нужно просто задать две вершины с разными
> цветами, и задать форму геометрии "линия".

Это можно сделать в glsl. Мне для понимания. Или где то в OpenGL обязательно надо указывать что мы используем геометрию "линия" ?

Просто команды из статьи и часть вашего кода я не могу применить  на жабе, glsl могу. (да там есть lwjgl но команды вроде не те)

#20
22:16, 28 мар 2017

vito-Z80
> Это можно сделать в glsl.
glsl это и есть OpenGL.

vito-Z80
> Или где то в OpenGL обязательно надо указывать что мы используем геометрию
> "линия" ?
да. Но есть просто разные альтернативные подходы. В том числе рисовать линии в glsl, но не без геометрии.

Это не всегда правильно.

vito-Z80
> (да там есть lwjgl но команды вроде не те)
Создание игр на Java используя LWJGL

#21
22:30, 28 мар 2017

foxes

А вот про пример с лавой который я выше описывал, с заполнением треугольников одной текстурой (по  Делоне) что лучше использовать glsl или OpenGL, и как вообще понимать в какой момент что из них будет производительней ? Пробовать и там и там ?

Спасибо за все, извините что столько вашего времени убил...

#22
22:41, 28 мар 2017

vito-Z80
> по  Делоне
Это поэт или художник?

vito-Z80
> то лучше использовать glsl или OpenGL, и как вообще понимать в какой момент что
> из них будет производительней ? Пробовать и там и там ?
Это в любом случае используется одновременно. Библиотека LibGdx рисует геометрию не простыми операциями GL, а через массивы "vertices". В массив нужно положить те значения которые передаются через glVertex glColor и тд.

mesh.setVertices(vertices);
shaderProgram.begin();
shaderProgram.setUniformMatrix("u_projModelView", camera.combined);
mesh.render(shaderProgram, GL20.GL_LINES);
shaderProgram.end();

Mesh
Полигональные сетки

#23
0:21, 29 мар 2017

>это OpenGL ?
первая версия БЕЗ glsl ( грубо язык для GPU , для произвольных эффектов)
, для совместимости поддерживается почти всеми win, linux, macos , но НЕ android, ios
Сейчас уже OpenGL 4 с glsl где кроме пиксельного и вертексного есть и другие , например геометрические шейдеры (GPU -программы для эффектов отображения).
----
1. для быстро накидать вращаюшийся кубик тоько для PC - пойдет opengl 1.x

2. для наиболее массового покрытия всех устройств , минимальное число апи функций, простых эффектов в один-два шейдера пойдет opengl es2.0 (или для PC - 3.3)

3. для последних GPU на PC - opengl 4

#24
6:03, 29 мар 2017

foxes
> Это поэт или художник?
Дядька какой-то


key0
Это понятно, мне бы понять работу между vs и fs (es2.0) Не просто по книжкам что от туда передается туда, а как бы на уровне передачи байт.
Если fs рисует пиксели параллельно по кол-ву ядер, то явно он берет данные из готового массива который изготовил vs ? Как это происходит, как вычисляется, в какой момент времени. Вообщем я не знаю, типа на "молекулярном" уровне компьютера.

P.S.
во второй половине 90=х увлекался демосценой на ZX-Spectrum - понятия/представления о байтах и битах для меня как то конкретней чем сейчас все эти языки "типа" для облегчения написания кода.

#25
8:14, 29 мар 2017

> Это понятно, мне бы понять работу между vs и fs

между vs и fs находится растеризатор. Если упрощенно, то VS кладет результат в fifo-буфер (там помимо буфера еще есть такая стадия как primitive assembly, которая берет вершины от всех ядер на которых работает  vs и выстраивает их в том же порядке, в котором они предполагались до входа в VS), растеризатор читает оттуда требуемое количество вершин (1 для точки, 2 для отрезка, 3 для треугольника) и преобразует их в множество фрагментов, оный примитив заполняющих.
Изображение
Эти фрагменты затем распределяются по ядрам на которых крутится FS и оттуда попадают во framebuffer.

> а как бы на уровне передачи байт.

на уровне передачи байт там то что происходит разнится в зависимости от производителя видеопроцессора и его архитектуры. Ну вот как для примера, вот даташит на VideoCore iV процессора малины:

https://spb.terraelectronica.ru/show_pdf.php?pdf=%2Fds%2Fpdf%2FV%… V-AG100-R.pdf

#26
10:01, 29 мар 2017

vito-Z80
> во второй половине 90=х увлекался демосценой на ZX-Spectrum -

Эх, школьники, 93-94 было дело ... причём даже без BetaDisk :)

#27
10:02, 29 мар 2017

nonamezerox
Круто, спасибо .

Аnonamezerox
> там помимо буфера еще есть такая стадия как primitive assembly, которая берет
> вершины от всех ядер на которых работает  vs и выстраивает их в том же порядке,
> в котором они предполагались до входа в VS
тут маленько не понял для чего это ?

fifo-буфер -  это массив вершин из которых берется количество вершин заданное примитивом (точка, отрезок или треугольник) + цвет и прочее?

nonamezerox
> и преобразует их в множество фрагментов, оный примитив заполняющих.
То есть тут создается еще один массив уже с конкретной координатой, цветом и прочим для каждого фрагмента ? Если да то можно узнать его длину и сравнением в fs дать return что бы пропустить рисование данного fs ? Или тут уже все автоматизировано и ничего не изменить ?

Еще если в треугольнике задать разные цвета вершин, то fs нарисует их градиентом, как он это просчитывает ?
Вычисляет длину отрезка между 2мя вершинами.
Вычитает vec4 цвета из большего меньшее [1,1,1,1] - [1,0,1,1] = [0,1,0,0] , результат цвета делим на длину отрезка (пусть будет 6), промежуточный цвет получается [0,1,0,0] / 6 =  [0,0.16,0,0] который прибавляется к текущему цвету начиная от начального наименьшего цвета vec4[1,0,1,1] каждую fs по данному отрезку, как то так ?

innuendo
без диска - хардкор (с тогдашними холодильниками и дверными звонками)... с 91 года был, в 96 родителей раскрутил на с дисководом + AY  и поперло...

#28
10:48, 29 мар 2017

vito-Z80
> Еще если в треугольнике задать разные цвета вершин, то fs нарисует их
> градиентом, как он это просчитывает ?

Интерполяторы, и они могут иметь модификаторы

> без диска - хардкор

Угу, сегодняшним перцам, считающим каждый мегабайт, этого не понять :(

#29
14:20, 29 мар 2017

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

не совсем массив, скорее fifo буффер

> Если да то можно узнать его длину

нет, нельзя

>и сравнением в fs дать return что бы пропустить рисование данного fs ?

а вот пропустить рисование конкретного фрагмента да, можно. Его

> конкретной координатой, цветом и прочим для каждого фрагмента

узнать тоже можно

https://www.khronos.org/opengl/wiki/Built-in_Variable_(GLSL)#Fragment_shader_inputs

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.