Как реализовать алгоритм сплайна тонких пластин в вершинном шейдере GLSL? - PullRequest
0 голосов
/ 29 октября 2019

Я хотел бы создать шейдер GLSL для деформации изображения / текстуры с использованием алгоритма TPS. Как мне написать вершинный шейдер GLSL для этого?

1 Ответ

0 голосов
/ 31 октября 2019

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

Мне нужно было фактически деформировать изображение с помощью GLSL, и, похоже, эта статья описывает, как это сделать: https://testdrive -archive.azurewebsites.net / Графика / Деформация / Default.html

attribute vec2 aPosition;
varying vec2 vTexCoord;
#define MAXPOINTS 9
uniform vec2 p1[MAXPOINTS]; // where the reference points
uniform vec2 p2[MAXPOINTS]; // where the warp points
void main() {
  vTexCoord = aPosition;
  vec2 position = aPosition * 2.0 - 1.0; // convert 0 - 1 range to -1 to +1 range
  for (int i = 0; i < MAXPOINTS; i++)
  {
      float dragdistance = distance(p1[i], p2[i]);
      float mydistance = distance(p1[i], position);

      if (mydistance < dragdistance)
      {
          vec2 maxdistort = (p2[i] - p1[i]) / 4.0;

          float normalizeddistance = mydistance / dragdistance;

          float normalizedimpact = (cos(normalizeddistance*3.14159265359)+1.0)/2.0;

          position += (maxdistort * normalizedimpact);
      }
  }      
  //gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);
  gl_Position = vec4(position, 0.0, 1.0);
}
...