Пример черно-белого шейдера на GLSL

Пример черно-белого шейдера на GLSL

1,015
9
102
Minebot добавил(а) новый ресурс:

Пример черно-белого шейдера на GLSL - Здесь мы создадим визуализацию отката на иконке скилла с помощью черно-белого шейдера

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

Узнать больше об этом ресурсе...
 

tox1cozZ

aka Agravaine
8,455
598
2,892
А если я хочу сделать экран игрока черно-белым, например. В каком месте мне нужно применить шейдер?
Ну типа знаешь эффект в играх, чем меньше хп, тем сильнее выцветает весь экран в черно-белый?
 
1,015
9
102
Ну тут уже надо доставать кадр из фреймбуффера, и нарисовать его еще раз, ток с шейдером. Поищи, гдет такое было в вопросах
 
4,045
63
645
Спасибо за пример... Я уже раз 3-й или 4-й, наверное, пытаюсь засесть за шейдеры и всё они у меня не идут что-то...
А на счёт фреймбуфера согласен! Хорошо бы и этот пример поиметь...
Как раз последний раз пытался с ним разобраться, но не смог...
Буду благодарен, если запилишь )
 
1,015
9
102
С фреймбуффером тоже были проблемы, но я ним разобрался. Я думал будет что-то сложнее, но нет. Там просто биндишь текстуру и рисуешь под шейдером mc.getFramebuffer().bindFramebufferTexture();
 
4,045
63
645
Возможно... Хотя у меня задача была в том, чтобы рисовать туда 3д объекты... И потом соединять его с основным.
А! И ещё я не могу понять, как достать буфер глубины ))) Говорят, что тоже как-то через фреймбуфер.
 
2,505
81
397
Ну камон, почему опять ARB?

После линка программы (glLinkProgram) нужно детачнуть (glDetachShader) все прикрепленные шейдеры. Где-то читал об этом.

Для того, чтобы прочитать файл в строку, есть IOUtils.toString.

Не знаю, возможно, это для примера, но не стоит щелкать текстуру и уж тем более шейдер для каждого скилла.
 
1,015
9
102
Ну камон, почему опять ARB?
А какая разница? Я подумал это какая-то оболочка, и эт будет правильнее. Так что о разнице я не знаю

Где-то читал об этом.
Чёт ни разу такого не видел. Множество шейдеров работают нормально без этого

не стоит щелкать текстуру и уж тем более шейдер для каждого скилла.
Я там написал, что так не надо делать, если еще что-то надо с ним зарендрить
 
2,505
81
397
Там просто биндишь текстуру и рисуешь под шейдером mc.getFramebuffer().bindFramebufferTexture();
И что, это работает? Если да, то это чистая удача и костыли. В этот ФБ майн рисует в текущий момент. Нельзя просто так взять и рисовать в себя же. Нужно забиндить отдельный фбо и шейдером отрендерить на него полноэкранный квад. Если нужны еще эффекты, то биндится еще один фбо и опять рендерится квад, но уже другим шейдером. Так можно постоянно свапать два шейдера (ping-pong) для разных эффектов.

Буфер глубины не биндят. Это один из атачментов фрейм буфера.
 
Последнее редактирование:
2,505
81
397
А какая разница? Я подумал это какая-то оболочка, и эт будет правильнее. Так что о разнице я не знаю
Не рекомендуется использовать екстеншены, когда тот же функционал есть в ядре.

Чёт ни разу такого не видел. Множество шейдеров работают нормально без этого
"Call glDeleteShader after attaching a shader to a program to simplify cleanup later." OpenGl Insights, 27p.
Извиняюсь, ошибся. Можно вообще удалить.
 
1,990
18
105
Буфер глубины не биндят. Это один из атачментов фрейм буфера.
Почему это не биндят? Если аттачмент буфера глубины представлен через FramebufferTexture, то он абсолютно так же без проблем биндится, как и обычная текстура. Другое дело, что он уже не должен являться активным Render Target'ом в этот момент (то же справедливо для обычных color attachment'ов, правда я не помню когда точно проверяется это условие, скорее всего во время любого вызова отрисовки объекта на экране).
Если он реализован через Renderbuffer - то уже да, надо делать блит в фбо.

В шейдере глубина из текстуры глубины достается как
Код:
texture(sampler, uv).x;
 
2,505
81
397
Ну это понятно. Мне просто показалось, что ему нужен был бинд для рендера в него.
 
Сверху