ShadowMapViewer constructor
ShadowMapViewer(
- dynamic light,
- dynamic innerWidth,
- 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();
}