29 lines
1.0 KiB
Bash
29 lines
1.0 KiB
Bash
//这里是树干节点的顶点着色器
|
||
//这里的所有的偏转角都是相对于Z轴正方向来说的,逆时针旋转的
|
||
uniform mat4 uMVPMatrix; //总变换矩阵
|
||
uniform float bend_R;//这里指的是树的弯曲半径
|
||
uniform float direction_degree;//这里指的风向,用角度表示的,沿Z轴正方向逆时针旋转
|
||
attribute vec3 aPosition; //顶点位置
|
||
attribute vec2 aTexCoor; //顶点纹理坐标
|
||
varying vec2 vTextureCoord; //用于传递给片元着色器的变量
|
||
void main()
|
||
{
|
||
//计算当前的弧度
|
||
float curr_radian=aPosition.y/bend_R;
|
||
//计算当前点的结果高度
|
||
float result_height=bend_R*sin(curr_radian);
|
||
//计算当前点的增加的长度
|
||
float increase=bend_R-bend_R*cos(curr_radian);
|
||
//计算当前点最后的x坐标
|
||
float result_X=aPosition.x+increase*sin(radians(direction_degree));
|
||
//计算当前点最后的z坐标
|
||
float result_Z=aPosition.z+increase*cos(radians(direction_degree));
|
||
//最后结果
|
||
vec4 result_point=vec4(result_X,result_height,result_Z,1.0);
|
||
gl_Position = uMVPMatrix * result_point; //根据总变换矩阵计算此次绘制此顶点位置
|
||
vTextureCoord = aTexCoor;//将接收的纹理坐标传递给片元着色器
|
||
}
|
||
|
||
|
||
|
||
|