|  | @@ -28,12 +28,12 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		<script type="x-shader/x-fragment" id="fragmentShader">
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +			uniform float widthFactor;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  			varying vec3 vCenter;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  			float edgeFactorTri() {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -				const float widthFactor = 1.0;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  				vec3 d = fwidth( vCenter.xyz );
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  				vec3 a3 = smoothstep( vec3( 0.0 ), d * widthFactor, vCenter.xyz );
 | 
	
	
		
			
				|  | @@ -56,6 +56,12 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  			import * as THREE from '../build/three.module.js';
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +			import { GUI } from './jsm/libs/dat.gui.module.js';
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			var API = {
 | 
	
		
			
				|  |  | +				widthFactor: 1
 | 
	
		
			
				|  |  | +			};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  			var renderer, scene, camera, mesh1, mesh2;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  			init();
 | 
	
	
		
			
				|  | @@ -83,16 +89,18 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  					} );
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -					mesh2 = new THREE.Mesh( geometry, material );
 | 
	
		
			
				|  |  | -					mesh2.position.set( - 40, 0, 0 );
 | 
	
		
			
				|  |  | +					mesh1 = new THREE.Mesh( geometry, material );
 | 
	
		
			
				|  |  | +					mesh1.position.set( - 40, 0, 0 );
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -					scene.add( mesh2 );
 | 
	
		
			
				|  |  | +					scene.add( mesh1 );
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  					// on the right
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +					var uniforms = { 'widthFactor': { value: API.widthFactor } };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  					var material = new THREE.ShaderMaterial( {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -						uniforms: {},
 | 
	
		
			
				|  |  | +						uniforms: uniforms,
 | 
	
		
			
				|  |  |  						vertexShader: document.getElementById( 'vertexShader' ).textContent,
 | 
	
		
			
				|  |  |  						fragmentShader: document.getElementById( 'fragmentShader' ).textContent,
 | 
	
		
			
				|  |  |  						side: THREE.DoubleSide
 | 
	
	
		
			
				|  | @@ -106,10 +114,10 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  					setupAttributes( geometry );
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -					mesh1 = new THREE.Mesh( geometry, material );
 | 
	
		
			
				|  |  | -					mesh1.position.set( 40, 0, 0 );
 | 
	
		
			
				|  |  | +					mesh2 = new THREE.Mesh( geometry, material );
 | 
	
		
			
				|  |  | +					mesh2.position.set( 40, 0, 0 );
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -					scene.add( mesh1 );
 | 
	
		
			
				|  |  | +					scene.add( mesh2 );
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  					//
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -117,6 +125,20 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  				} );
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +				//
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				var gui = new GUI();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				gui.add( API, 'widthFactor', 0.4, 4 ).onChange( function () {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +					mesh2.material.uniforms.widthFactor.value = API.widthFactor;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				} );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				gui.open();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				//
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  				window.addEventListener( 'resize', onWindowResize, false );
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  			}
 |