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

85 lines
2.6 KiB
Bash

precision mediump float;
varying vec2 vTextureCoord; //接收纹理坐标参数
varying float vertexHeight;//接受顶点的高度值
uniform sampler2D usTextureTuCeng;//纹理内容数据 ----土层
uniform sampler2D usTextureCaoDi;//纹理内容数据-----草地
uniform sampler2D usTextureShiTou;//纹理内容数据-----石头
uniform sampler2D usTextureShanDing;//纹理内容数据-----山顶
uniform float uheight;//最低点高度
uniform float uheight_span;
uniform int uland_flag;//山的标志1为地面上的高山
void main()
{
//第一块地图的高度
float height1=30.0;//第一个的渐变高度
float height2=30.0;
float height3=10.0;
float land1=250.0;//陆地山的过度
float land2=400.0;
vec4 finalColor0=vec4(0.3,0.3,0.3,0.5);//黑色条
vec4 finalColor1=texture2D(usTextureTuCeng, vTextureCoord);//土层
vec4 finalColor2=texture2D(usTextureCaoDi, vTextureCoord); //草地
vec4 finalColor3=texture2D(usTextureShiTou, vTextureCoord);//石头
vec4 finalColor4=texture2D(usTextureShanDing, vTextureCoord);//山顶纹理
if(uland_flag==0)
{
if(abs(vertexHeight)<uheight)
{
float ratio=abs(vertexHeight)/uheight;
finalColor3 *=(1.0-ratio);
finalColor0 *=ratio;
gl_FragColor =finalColor3+ finalColor0;
}
else if(abs(vertexHeight)>=uheight&&abs(vertexHeight)<=uheight+height1)//第一个渐变高度
{
float ratio=(abs(vertexHeight)-uheight)/height1;
finalColor0 *=(1.0-ratio);
finalColor1 *=ratio;
gl_FragColor =finalColor1 + finalColor0;
}
else if(abs(vertexHeight)>uheight+height1&&abs(vertexHeight)<=uheight_span-height2)
{
gl_FragColor =finalColor1;
}
else if(abs(vertexHeight)>=uheight_span-height2&&abs(vertexHeight)<=uheight_span)
{
float ratio=(abs(vertexHeight)-uheight_span+height2)/height2;
finalColor1 *=(1.0-ratio);
finalColor0 *=ratio;
gl_FragColor =finalColor1 + finalColor0;
}
else if(abs(vertexHeight)>=uheight_span&&abs(vertexHeight)<=uheight_span+height3)
{
float ratio=(abs(vertexHeight)-uheight_span)/height3;
finalColor0 *=(1.0-ratio);
finalColor2 *=ratio;
finalColor0.a=0.2;
gl_FragColor =finalColor2 + finalColor0;
}
else
{
gl_FragColor = finalColor2;
}
}
else
{
if(abs(vertexHeight)<land1)
{
gl_FragColor = finalColor2;
}
else if(abs(vertexHeight)>=land1&&abs(vertexHeight)<=land2)
{
float ratio=(abs(vertexHeight)-land1)/(land2-land1);
finalColor2 *=(1.0-ratio);
finalColor4 *=ratio;
gl_FragColor =finalColor2 + finalColor4;
}
else
{
gl_FragColor = finalColor4;
}
}
}