Buckets:
| import { | |
| Color, | |
| ShaderMaterial, | |
| UniformsLib, | |
| UniformsUtils, | |
| } from 'three'; | |
| /** | |
| * A special line material for meshes loaded via {@link LDrawLoader}. | |
| * | |
| * This module can only be used with {@link WebGLRenderer}. When using {@link WebGPURenderer}, | |
| * import the class from `LDrawConditionalLineNodeMaterial.js`. | |
| * | |
| * @augments ShaderMaterial | |
| * @three_import import { LDrawConditionalLineMaterial } from 'three/addons/materials/LDrawConditionalLineMaterial.js'; | |
| */ | |
| class LDrawConditionalLineMaterial extends ShaderMaterial { | |
| static get type() { | |
| return 'LDrawConditionalLineMaterial'; | |
| } | |
| /** | |
| * Constructs a new conditional line material. | |
| * | |
| * @param {Object} [parameters] - An object with one or more properties | |
| * defining the material's appearance. Any property of the material | |
| * (including any property from inherited materials) can be passed | |
| * in here. Color values can be passed any type of value accepted | |
| * by {@link Color#set}. | |
| */ | |
| 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, { | |
| /** | |
| * The material's opacity. | |
| * | |
| * @name LDrawConditionalLineMaterial#opacity | |
| * @type {number} | |
| * @default 1 | |
| */ | |
| opacity: { | |
| get: function () { | |
| return this.uniforms.opacity.value; | |
| }, | |
| set: function ( value ) { | |
| this.uniforms.opacity.value = value; | |
| } | |
| }, | |
| /** | |
| * The material's color. | |
| * | |
| * @name LDrawConditionalLineMaterial#color | |
| * @type {Color} | |
| * @default (1,1,1) | |
| */ | |
| color: { | |
| get: function () { | |
| return this.uniforms.diffuse.value; | |
| } | |
| } | |
| } ); | |
| this.setValues( parameters ); | |
| /** | |
| * This flag can be used for type testing. | |
| * | |
| * @type {boolean} | |
| * @readonly | |
| * @default true | |
| */ | |
| this.isLDrawConditionalLineMaterial = true; | |
| } | |
| } | |
| export { LDrawConditionalLineMaterial }; | |
Xet Storage Details
- Size:
- 4.47 kB
- Xet hash:
- 8e15e80cd37fd1136873343ef036d461405b8dd493b3151bf5445aa1958ed839
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.