MCP 3D Printer Server

by DMontgomery40
Verified
import { Color, ShaderMaterial, UniformsLib, UniformsUtils, } from 'three'; class LDrawConditionalLineMaterial extends ShaderMaterial { static get type() { return 'LDrawConditionalLineMaterial'; } constructor( parameters ) { super( { uniforms: UniformsUtils.merge( [ UniformsLib.fog, { diffuse: { value: new Color() }, opacity: { value: 1.0 } } ] ), vertexShader: /* glsl */` attribute vec3 control0; attribute vec3 control1; attribute vec3 direction; varying float discardFlag; #include <common> #include <color_pars_vertex> #include <fog_pars_vertex> #include <logdepthbuf_pars_vertex> #include <clipping_planes_pars_vertex> void main() { #include <color_vertex> vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 ); gl_Position = projectionMatrix * mvPosition; // Transform the line segment ends and control points into camera clip space vec4 c0 = projectionMatrix * modelViewMatrix * vec4( control0, 1.0 ); vec4 c1 = projectionMatrix * modelViewMatrix * vec4( control1, 1.0 ); vec4 p0 = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); vec4 p1 = projectionMatrix * modelViewMatrix * vec4( position + direction, 1.0 ); c0.xy /= c0.w; c1.xy /= c1.w; p0.xy /= p0.w; p1.xy /= p1.w; // Get the direction of the segment and an orthogonal vector vec2 dir = p1.xy - p0.xy; vec2 norm = vec2( -dir.y, dir.x ); // Get control point directions from the line vec2 c0dir = c0.xy - p1.xy; vec2 c1dir = c1.xy - p1.xy; // If the vectors to the controls points are pointed in different directions away // from the line segment then the line should not be drawn. float d0 = dot( normalize( norm ), normalize( c0dir ) ); float d1 = dot( normalize( norm ), normalize( c1dir ) ); discardFlag = float( sign( d0 ) != sign( d1 ) ); #include <logdepthbuf_vertex> #include <clipping_planes_vertex> #include <fog_vertex> } `, fragmentShader: /* glsl */` uniform vec3 diffuse; uniform float opacity; varying float discardFlag; #include <common> #include <color_pars_fragment> #include <fog_pars_fragment> #include <logdepthbuf_pars_fragment> #include <clipping_planes_pars_fragment> void main() { if ( discardFlag > 0.5 ) discard; #include <clipping_planes_fragment> vec3 outgoingLight = vec3( 0.0 ); vec4 diffuseColor = vec4( diffuse, opacity ); #include <logdepthbuf_fragment> #include <color_fragment> outgoingLight = diffuseColor.rgb; // simple shader gl_FragColor = vec4( outgoingLight, diffuseColor.a ); #include <tonemapping_fragment> #include <colorspace_fragment> #include <fog_fragment> #include <premultiplied_alpha_fragment> } `, } ); Object.defineProperties( this, { opacity: { get: function () { return this.uniforms.opacity.value; }, set: function ( value ) { this.uniforms.opacity.value = value; } }, color: { get: function () { return this.uniforms.diffuse.value; } } } ); this.setValues( parameters ); this.isLDrawConditionalLineMaterial = true; } } export { LDrawConditionalLineMaterial };