39 lines
1.2 KiB
Bash
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;//将接收的纹理坐标传递给片元着色器
|
|
} |