[map-sdk]同步地图3.2.0修改 1.增加聚焦自车周边车辆 2.车道中心线数据平滑处理

This commit is contained in:
jiaguofeng
2023-09-19 10:59:09 +08:00
parent c467a8a50d
commit f29829751c
45 changed files with 777 additions and 609 deletions

View File

@@ -31,6 +31,7 @@ uniform bool isLightWave;
in vec4 posInLight;
in vec4 _color;
in highp vec3 posInEye;
in vec3 worldPos;
in vec2 _uv;
in float signalLineTexY;
uniform float waveVel;
@@ -47,6 +48,15 @@ uniform float fogStart;
uniform float fogEnd;
uniform float fogDensity;
uniform bool isGuideLine; //引导线
uniform vec3[4] streetLightWorldPos;
uniform int streetLightCnt;
uniform bool isBlurEnable;
uniform vec3 blurColor;
uniform float blurStart;
uniform float blurEnd;
uniform float blurDensity;
uniform float zoom;
void setSpotLightColor(){ //聚光灯光照效果
lowp float r_base= 4.0;
lowp float r_max = spotRadius * 32.0;
@@ -63,6 +73,24 @@ void setSpotLightColor(){ //聚光灯光照效果
fragColor = c_light;
}
}
float isInStreetLightArea(){
for(int i=0;i<streetLightCnt;i++){
float l = length(streetLightWorldPos[i]-worldPos);
if(l<3.0)
return l;
}
return 5.0;
}
void setStreetLight(float l){
// fragColor = vec4(1.0,0.0,0.0,1.0);
// float radius = 3.0;
// float l = length(streetLightWorldPos[i]-worldPos);
// float fac = 1.0 - l / radius;
// fac = pow(fac, 2.0)*0.15;
float fac = (1.0 - smoothstep(0.0,3.0,l))*0.15;
vec4 c_light = vec4(fac,fac,fac,0.0);
fragColor = fragColor + c_light;
}
bool isInScreen(vec4 p){ //是否在包围盒[(0,0)-(1,1)]内
if(p.x < 0.0 || p.x > 1.0 || p.y < 0.0 || p.y > 1.0)
return false;
@@ -149,9 +177,21 @@ void setGuideLine(){
// if(fragColor.a>0.1)
// fragColor.a = clamp(1.0/guideLineTexY,0.0,1.0);
}
void setBlur()
{
if(!isBlurEnable)
return;
float distanceFromOrigin = length(worldPos-vec3(0.0,0.0,0.0));
if(distanceFromOrigin<(blurStart*zoom))
return;
float blurAlpha= 1.0-exp(-(distanceFromOrigin/50.0));
// float blurAlpha = smoothstep(distanceFromOrigin,blurStart*zoom,blurEnd*zoom);
// float blurAlpha = (distanceFromOrigin - (blurStart*zoom)) / ((blurEnd*zoom) - (blurStart*zoom));
blurAlpha=clamp(blurAlpha,0.0,1.0)*blurDensity;
fragColor.rgb = mix(fragColor.rgb,blurColor,blurAlpha);
}
void main()
{
if (isRenderZebra)
setZebra();
else if (isRenderSignalLine)
@@ -166,11 +206,6 @@ void main()
setTex();
else
setColor();
if (isSpotLight)
setSpotLightColor();
fragColor*=colorFac;
if (isShadow)
setShadow();
if (isWater){
fragColor = waterColor*dot(normalize(fragColor.rgb), vec3(0.0, 0.0, 1.0));
fragColor.a = 1.0;
@@ -179,5 +214,16 @@ void main()
if(_uv.y>0.9)
fragColor.a = 0.0;
}
fragColor*=colorFac;
if (isSpotLight)
setSpotLightColor();
float streetLightDis = isInStreetLightArea();
if(streetLightDis<3.0){
setStreetLight(streetLightDis);
}else{
if (isShadow)
setShadow();
}
setLinearFog();
setBlur();
}

View File

@@ -21,7 +21,15 @@ uniform vec3 fogColor;
uniform float fogStart;
uniform float fogEnd;
uniform float fogDensity;
uniform bool isBlurEnable;
uniform vec3 blurColor;
uniform float blurStart;
uniform float blurEnd;
uniform float blurDensity;
uniform vec3 cameraPos;
uniform float zoom;
uniform bool isIce;
in vec3 posInEye;
layout(location = 0) out vec4 fragColor;
//锚点变色逻辑,高爽写得代码,逻辑没变,复制到这
@@ -65,6 +73,19 @@ void setLinearFog()
fogAlpha=clamp(fogAlpha,0.0,1.0)*fogDensity;
fragColor.rgb = mix(fragColor.rgb,fogColor,fogAlpha);
}
void setBlur()
{
if(!isBlurEnable)
return;
float distanceFromOrigin = length(posInEye-vec3(0.0,0.0,0.0));
if(distanceFromOrigin<(blurStart*zoom))
return;
float blurAlpha= 1.0-exp(-(distanceFromOrigin/50.0));
// float blurAlpha = smoothstep(distanceFromOrigin,blurStart*zoom,blurEnd*zoom);
// float blurAlpha = (distanceFromOrigin - (blurStart*zoom)) / ((blurEnd*zoom) - (blurStart*zoom));
blurAlpha=clamp(blurAlpha,0.0,1.0)*blurDensity;
fragColor.rgb = mix(fragColor.rgb,blurColor,blurAlpha);
}
void main()
{
//点光源光照Blinn-Phong模型
@@ -80,6 +101,9 @@ void main()
oriColor = changeColorMethod(texture(texId,fragTexCoord) * colorFac);
fragColor = oriColor * (ambientColor + diffuseColor * diffuse) + specularColor * specular; //融合这几种颜色
fragColor+=oriColor*vec4(0.3)*max(dot(vec3(0,0,1),N),0.0); //罗欢说模型屁股那太黑,给屁股那增加点颜色
if(isIce)
fragColor+=vec4(.0,.0,0.2,0.0);
fragColor.a = oriColor.a;
setLinearFog();
setBlur();
}

View File

@@ -33,6 +33,7 @@ layout(location = 3) in vec2 uv;
out vec4 posInLight; //从光源位置看此片元的proj坐标
out vec4 _color;
out vec3 posInEye; //片元的view坐标
out vec3 worldPos; //片元的view坐标
out vec2 _uv;
out float signalLineTexY;
out float waveOff;
@@ -94,6 +95,7 @@ void setGuideLine(){
}
void main()
{
worldPos = (modelMat * pos).xyz;
setPosInEye();
if(isRenderDivider){
vec4 pos0 = projMat*viewMat*modelMat * vec4(dividerPos0,1.0);