Синусоидальное искажение 2D-изображения - это классический визуальный эффект: получение 2D-изображения и его деформация по оси X или Y путем смещения пикселей в соответствии с синусоидальной волной. В конечном итоге это выглядит примерно так:
Я видел несколько примеров кода для этого, и стандартный способ сделать это с помощью OpenGL, похоже, - это изображение размеров (x, y):
for each column from 0 to X
draw a single quad one pixel wide and y pixels high, offset by a sine wave value
Конечно, это требует большой работы на стороне клиента. Есть ли способ нарисовать один квад и переложить работу по искажению на графический процессор с помощью шейдеров? Только вершинные и фрагментные шейдеры; Я использую OpenGL 2, поэтому геометрических шейдеров нет.
Я знаю, что могу использовать фрагментный шейдер для выборки координат текстуры, смещенных синусоидальной волной, но заставить их разместить за пределами исходного блока, определенного квадратом, было бы сложно, и я бы предпочел не иметь вывод будет обрезан, как на образце изображения. Есть ли способ обойти эту проблему?