2022-09-19 18:05:01 +08:00

39 lines
1.2 KiB
Bash

uniform mat4 uMVPMatrix; //总变换矩阵
attribute vec3 aPosition; //顶点位置
attribute vec2 aTexCoor; //顶点纹理坐标
varying vec2 vTextureCoord; //用于传递给片元着色器的变量
uniform float ratio;
void main()
{
float pi = 3.1415926;
//-----------------------这里要进行二维扭动----------------
//中心点的X坐标和Y坐标
float centerX=0.0;
float centerY=-5.0;
//获取当前点的X坐标和Y坐标
float currX = aPosition.x;
float currY = aPosition.y;
//计算X和Y的偏移量
float spanX = currX - centerX;
float spanY = currY - centerY;
//计算极径
float currRadius = sqrt(spanX * spanX + spanY * spanY);
//计算当前点的极角
float currRadians;//用弧度表示
if(spanX != 0.0)
{
currRadians = atan(spanY , spanX);
}
else
{
currRadians = spanY > 0.0 ? pi/2.0 : 3.0*pi/2.0;
}
//进行扭曲
float resultRadians = currRadians + ratio*currRadius;
//计算结果点
float resultX = centerX + currRadius * cos(resultRadians);
float resultY = centerY + currRadius * sin(resultRadians);
//构造结果点
gl_Position = uMVPMatrix * vec4(resultX,resultY,0.0,1); //根据总变换矩阵计算此次绘制此顶点位置
vTextureCoord = aTexCoor;//将接收的纹理坐标传递给片元着色器
}