@threlte/extras
Version:
Utilities, abstractions and plugins for your Threlte apps
49 lines (46 loc) • 1.48 kB
JavaScript
import { revision } from '../../lib/revision';
export const vertexShader = `
uniform float thickness;
uniform bool screenspace;
uniform vec2 size;
void main() {
vec4 tNormal = vec4(normal, 0.0);
vec4 tPosition = vec4(transformed, 1.0);
tNormal = instanceMatrix * tNormal;
tPosition = instanceMatrix * tPosition;
if (!screenspace) {
vec3 newPosition = tPosition.xyz + tNormal.xyz * thickness;
gl_Position = projectionMatrix * modelViewMatrix * vec4(newPosition, 1.0);
} else {
vec4 clipPosition = projectionMatrix * modelViewMatrix * tPosition;
vec4 clipNormal = projectionMatrix * modelViewMatrix * tNormal;
vec2 offset = normalize(clipNormal.xy) * thickness / size * clipPosition.w * 2.0;
clipPosition.xy += offset;
gl_Position = clipPosition;
}
}`;
export const fragmentShader = `
uniform vec3 color;
uniform float opacity;
void main(){
gl_FragColor = vec4(color, opacity);
}
`;