import * as THREE from 'three' type AttributesDescription = { vPosition:THREE.Vector3 vTexCoord: THREE.Vector2 } type VaryingDescription = { d: THREE.Vector2 } const uniforms = { uModelViewProjectionMatrix: { value: new THREE.Matrix4 }, uUVOffset: { value: new THREE.Vector2 }, } export default { attributesDescription: undefined as AttributesDescription | undefined, varyingDescription: undefined as VaryingDescription | undefined, uniforms: uniforms, vetexShader: ` precision highp float; uniform mat4 uModelViewProjectionMatrix; uniform vec2 uUVOffset; attribute vec3 vPosition; attribute vec2 vTexCoord; varying mediump vec2 d; vec4 mul(mat4 i,vec3 p) //mulPoint { return i[0] * p.x + ( i[1] * p.y + ( i[2]*p.z + i[3]) ); } void main(void) { gl_Position= mul( uModelViewProjectionMatrix, vPosition.xyz); d = vTexCoord + uUVOffset; } `, fragmentShader: ` precision mediump float; #include uniform sampler2D tAlbedo; varying mediump vec2 vUv; void main() { float albedo=texture2D(tAlbedo,vUv).a; if(albedo<=f(vUv.x)) { discard; } gl_FragColor=vec4(0.0); } ` }