ShadowMapViewer constructor

ShadowMapViewer(
  1. dynamic light,
  2. dynamic innerWidth,
  3. dynamic innerHeight
)

Implementation

ShadowMapViewer(light, innerWidth, innerHeight) {
  this.light = light;
  this.innerWidth = innerWidth;
  this.innerHeight = innerHeight;

  //- Internals
  var scope = this;
  var doRenderLabel = (light.name != null && light.name != '');

  //Holds the initial position and dimension of the HUD
  frame = {"x": 10, "y": 10, "width": 256, "height": 256};

  camera = new OrthographicCamera(innerWidth / -2, innerWidth / 2,
      innerHeight / 2, innerHeight / -2, 1, 10);
  camera.position.set(0, 0, 2);
  scene = new Scene();
  // scene.background = Color.fromHex(0xff00ff);

  //HUD for shadow map
  var shader = UnpackDepthRGBAShader;

  uniforms = UniformsUtils.clone(shader["uniforms"]);
  var material = new ShaderMaterial({
    "uniforms": uniforms,
    "vertexShader": shader["vertexShader"],
    "fragmentShader": shader["fragmentShader"]
  });
  var plane = new PlaneGeometry(frame["width"]!, frame["height"]!);
  mesh = new Mesh(plane, material);

  scene.add(mesh);

  //Label for light's name
  var labelCanvas, labelMesh;

  // if ( doRenderLabel ) {

  // 	labelCanvas = document.createElement( 'canvas' );

  // 	var context = labelCanvas.getContext( '2d' );
  // 	context.font = 'Bold 20px Arial';

  // 	var labelWidth = context.measureText( light.name ).width;
  // 	labelCanvas.width = labelWidth;
  // 	labelCanvas.height = 25;	//25 to account for g, p, etc.

  // 	context.font = 'Bold 20px Arial';
  // 	context.fillStyle = 'rgba( 255, 0, 0, 1 )';
  // 	context.fillText( light.name, 0, 20 );

  // 	var labelTexture = new Texture( labelCanvas );
  // 	labelTexture.magFilter = LinearFilter;
  // 	labelTexture.minFilter = LinearFilter;
  // 	labelTexture.needsUpdate = true;

  // 	var labelMaterial = new MeshBasicMaterial( { map: labelTexture, side: DoubleSide } );
  // 	labelMaterial.transparent = true;

  // 	var labelPlane = new PlaneGeometry( labelCanvas.width, labelCanvas.height );
  // 	labelMesh = new Mesh( labelPlane, labelMaterial );

  // 	scene.add( labelMesh );

  // }

  // Set the size of the displayed shadow map on the HUD
  this.size = {"width": frame["width"]!, "height": frame["height"]!};
  // this.size = {
  // 	width: frame.width,
  // 	height: frame.height,
  // 	set: function ( width, height ) {

  // 		this.width = width;
  // 		this.height = height;

  // 		mesh.scale.set( this.width / frame.width, this.height / frame.height, 1 );

  // 		//Reset the position as it is off when we scale stuff
  // 		resetPosition();

  // 	}
  // };

  // Set the position of the displayed shadow map on the HUD
  this.position = {"x": frame["x"]!, "y": frame["y"]!};
  // this.position = {
  // 	x: frame.x,
  // 	y: frame.y,
  // 	set: function ( x, y ) {

  // 		this.x = x;
  // 		this.y = y;

  // 		var width = scope.size.width;
  // 		var height = scope.size.height;

  // 		mesh.position.set( - window.innerWidth / 2 + width / 2 + this.x, window.innerHeight / 2 - height / 2 - this.y, 0 );

  // 		if ( doRenderLabel ) labelMesh.position.set( mesh.position.x, mesh.position.y - scope.size.height / 2 + labelCanvas.height / 2, 0 );

  // 	}
  // };

  //Force an update to set position/size
  this.update();
}