22 lines
800 B
Bash
22 lines
800 B
Bash
uniform mat4 uMVPMatrix; //总变换矩阵
|
|
attribute vec3 aPosition; //顶点位置
|
|
attribute vec2 aTexCoor; //顶点纹理坐标
|
|
varying vec2 vTextureCoord; //用于传递给片元着色器的变量
|
|
uniform float angleSpan;//扭曲总角度跨度
|
|
uniform float yStart;//Y坐标起始点
|
|
uniform float ySpan;//Y坐标跨度
|
|
void main()
|
|
{
|
|
//计算当前顶点角度跨度
|
|
float tempAS= angleSpan*(aPosition.y-yStart)/ySpan;
|
|
vec3 tPosition=aPosition;
|
|
//若不是最下面一排顶点计算XZ位置
|
|
if(aPosition.y>yStart)
|
|
{
|
|
tPosition.x=(cos(tempAS)*aPosition.x-sin(tempAS)*aPosition.z);
|
|
tPosition.z=(sin(tempAS)*aPosition.x+cos(tempAS)*aPosition.z);
|
|
}
|
|
gl_Position = uMVPMatrix * vec4(tPosition,1); //根据总变换矩阵计算此次绘制此顶点位置
|
|
|
|
vTextureCoord = aTexCoor;//将接收的纹理坐标传递给片元着色器
|
|
} |