Perlin Noise Light

+ show on canvas

by Konstantin Cryman

HTML

<!DOCTYPE html>
<html>
 <body>
<canvas id="myCanvas"></canvas>
<br/>

bonus: <div class="bar" id="myCan1Bar"><span style="background: #ffff00;"></span></div><br>
danger: <div class="bar" id="myCan2Bar"><span style="background: #ff0000;"></span></div><br>
secret: <div class="bar" id="myCan3Bar"><span style="background: #ff00ff;"></span></div><br>
flora: <div class="bar" id="myCan4Bar"><span style="background: #00ff00;"></span></div><br>
fauna: <div class="bar" id="myCan5Bar"><span style="background: #00ffff;"></span></div><br>
resources: <div class="bar" id="myCan6Bar"><span style="background: #cccccc;"></span></div><br>

<br/>
<input id="T1" type="range" min="1" max="20" step="1" value="20"><span id="T1d"><span/>

<!--<br/>
<input id="T2" type="range" min="-1" max="1" step="0.01" value="0">
<br/>
<input id="T3" type="range" min="-1" max="1" step="0.01" value="0">
<br/>
<input id="T4" type="range" min="-1" max="1" step="0.01" value="0">
 -->
</body>
</html>

CSS

#myCanvas{
  border:1px; 
  solid #d3d3d3; 
  width: 500px;
}
.miniCan{
  width: 50px;
}
.bar{
  width: 300px;
  position: relative;
  border: 1px solid #333;
} 

.bar span{
  display: block;
  height: 20px;
  border: 1px solid #ccc;
}
input{
  display: inline-block;
}

canvas {
    image-rendering: optimizeSpeed;             /* Older versions of FF          */
    image-rendering: -moz-crisp-edges;          /* FF 6.0+                       */
    image-rendering: -webkit-optimize-contrast; /* Safari                        */
    image-rendering: -o-crisp-edges;            /* OS X & Windows Opera (12.02+) */
    image-rendering: pixelated;                 /* Awesome future-browsers       */
    -ms-interpolation-mode: nearest-neighbor;   /* IE                            */
}

JavaScript

var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
	//ctx.moveTo(0,0);
  var Noise = {};
  var BuCanvas = document.createElement('canvas');
  var BuImageData = function(){
  	return BuCanvas.getContext('2d').getImageData( 0, 0, BuCanvas.width, BuCanvas.height)
  };
  
var T1 = 20;

    c.width = 50;
    c.height = 50;
    
function randomNoise(canvas, x, y, width, height, alpha) {
    x = x || 0;
    y = y || 0;
    width = width || canvas.width;
    height = height || canvas.height;
    alpha = alpha || 255;
    var g = canvas.getContext("2d"),
        imageData = g.getImageData(x, y, width, height),
        random = Math.random,
        pixels = imageData.data,
        n = pixels.length,
        i = 0;
    while (i < n) {
        pixels[i++] = pixels[i++] = pixels[i++] = (random() * 255) | 0;
        pixels[i++] = alpha;
    }
    g.putImageData(imageData, x, y);
    return canvas;
}

function perlinNoise( canvas, noise, justFilter ) {
    
    var g = canvas.getContext("2d");
      
    if( !justFilter ){
    
      Noise = noise || randomNoise((function(){
        var can = document.createElement('canvas');
        can.width = canvas.width;
        can.height = canvas.height;
        return can;
      })());
      
      for (var size = 4; size <= Noise.width; size *= 2) {
          var x = (Math.random() * (Noise.width - size)) | 0,
              y = (Math.random() * (Noise.height - size)) | 0;
          g.globalAlpha = 4 / size;
          g.drawImage( Noise, x, y, size, size, 0, 0, canvas.width, canvas.height);
      }
      
      BuCanvas.width = canvas.width;
      BuCanvas.height = canvas.height;
      BuCanvas.getContext('2d')
      		.putImageData( g.getImageData( 0, 0, BuCanvas.width, BuCanvas.height), 0, 0 );
      
      var imageData = g.getImageData( 0, 0, canvas.width, canvas.height), 
          pixels = imageData.data, 
          n = pixels.length, 
          i = 0;
           // g.save();
        /* Scale random...