export const allShare={
uniforms:{
u_tcolor: { value: new THREE.Color('#ffffff') },
u_r: { value: 0.25 },
u_length: { value: 20 }, //扫过区域
u_height:{value:30.5},
map:{
type:'t',
value:new THREE.TextureLoader().load('static/model/wg/color2.jpg')
}
},
vertexShader:`
varying vec3 vp;
varying vec2 vUv;
varying vec3 vNormal;
void main(){
vUv=uv;
vp = position;
vNormal=normal;
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
}
`,
fragmentShader:`
varying vec3 vp;
uniform sampler2D map;
uniform vec3 u_tcolor;
uniform float u_r;
uniform float u_length;
varying vec2 vUv;
varying vec3 vNormal;
float getLeng(float x, float y){
return sqrt((x-0.0)*(x-0.0)+(y-0.0)*(y-0.0));
}
void main(){
float uOpacity = 0.3;
float uLength = getLeng(vp.x,vp.y);
vec3 vColor =texture2D(map,vUv).rgb;
if ( uLength <= u_r && uLength > u_r - u_length ) {
float op = sin( (u_r - uLength) / u_length ) * 0.6 + 0.3 ;
uOpacity = op;
vColor = u_tcolor;
}
gl_FragColor = vec4(vColor,uOpacity);
}
`,
shareMaterial:()=>{
return new THREE.ShaderMaterial({
uniforms: allShare.uniforms,
vertexShader: allShare.vertexShader,
fragmentShader: allShare.fragmentShader
})
}
}
根据法向量判断是否是在顶部
vec3 vColor =vec3(0.7,0.5,1.0);
if(vNormal.z<1.0){
}