Как стать автором
Обновить

Комментарии 6

Визуально немного напоминает 3D диаграмму Вороного. Или 4D для анимации. Чуть неравномерно размыть, чуть искривить и вполне похоже. Несколько затратно по вычислениям, но на Shadertoy есть рабочие примеры.

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

Можно сэмплировать несколько текстур, пусть даже небольшого разрешения. В данном примере, в качестве бекграунда зациклено пять текстур, которые смещаются с разной скоростью. Если смотреть на звёзды одинакового размера — можно заметить что они повторяются, но общая картина — нет.
14мб гифка
image

А вот объясните мне, пожалуйста, такую тему. В DirectX можно читать из текстуры в режиме Sample(Linear, координаты), если координаты попадают между двумя текселями, берётся линейная комбинация соответствующих цветов. Можно ли сделать это в OpenGL? Там есть функция texture и два параметра текстуры — GL_TEXTURE_MIN_FILTER и GL_TEXTURE_MAG_FILTER, пытался их задавать и так, и этак безуспешно. Я рисую нечто во фреймбуфер, а потом оттуда читаю, причём надо делать линейную интерполяцию соседних текселей, есть чужие шейдеры на DirectX, где это делается так.
Чуть поясню: мне надо брать линейную комбинацию текселя с одним из его соседей (сглаживание краёв методом GAA). Коэффициэнты линейной комбинации вычислены заранее. В DirectX можно задать координаты текселя с подходящим сдвигом и линейная комбинация получится автоматически. Можно ли это сделать в OpenGL?

Можно. Вызываешь glTexParameteri ( target, GL_TEXTURE_MIN_FILTER, GL_LINEAR), где target — "тип" или, по-другому, "точка биндинга" текстуры, которая ссылается на целевую текстуру, для которой ты устанавливаешь параметр.


Если ты создал текстуру свою как GL_TEXTURE_2D, то target = GL_TEXTURE_2D, аналогично с другими типами текстур, GL_TEXTURE_3D или GL_TEXTURE_CUBE_MAP.


Важно перед вызовом функции забиндить свою целевую текстуру к нужному типу (точке биндинга): glBindTexture(GL_TEXTURE_2D, myTextureUintId), где первый параметр — точка биндинга (тип твоей текстуры), а второй параметр — id текстуры (имя в терминологии OpenGL), который вернула glGenTexture.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории