From pixels to Animation

Filters and Effects

포토샵과 같은 그래픽프로그램에서 사진을 수정하고 색상을 변경하듯 브라우저에서도 비슷한 효과를 줄수있다.

이와관련된 라이브러리가 이미 존재하지만 기능을 배워보도록하자.

imageData

var imageData = context.getImageData(0,0,imageObj.width, imageObj.height);
var data = imageData.data;
  • width

  • height

  • data(Uint8ClampedArray)

unsigned ir contains only positive value

int8 8bitnumber rgbargbargba

  • createImageData

  • getImageData

  • putImageData

Make Grayscale Image

ctx.drawImage(image, 0, 0);
var imageData = ctx.getImageData(0,0,200, 200);
var data = imageData.data;
for(var i = 0; i < data.length; i += 4) {
var brightness = 0.34 * data[i] + 0.5 * data[i + 1] + 0.16 * data[i + 2];
// red
data[i] = brightness;
// green
data[i + 1] = brightness;
// blue
data[i + 2] = brightness;
}
// overwrite original image
ctx.putImageData(imageData, 0, 0);

Play vidoes with canvas

<video id="v" src="http://media.w3.org/2010/05/sintel/trailer.mp4" controls loop></video>
<canvas id="c"></canvas>
document.addEventListener("DOMContentLoaded", function(){
  var canvas =  document.getElementById('c');
  var video =  document.getElementById('v');
  var ctx = canvas.getContext('2d');

  video.addEventListener('loadedmetadata',function(){
    canvas.width = this.videoWidth;
    canvas.height = this.videoHeight;
  });

  var draw = function(){
    ctx.drawImage(v,0,0);
    requestAnimationFrame(draw);
    //setInterval(draw);

  }

  video.addEventListener('play', function() {
    if(video.paused || video.ended) return;
    draw();
  });
});

The Game Loop / User input

function draw() {
    // request to execute this function at the next earliest convenience
    requestAnimationFrame(draw);
    processInput();
    moveObjectsAndEnemies();
    drawAllTheThings();
}

키보드 인풋

유저의 키보드 인풋을 처리하기위해 Kibo 라이브러리를 사용하면 간단하다.

var k = new Kibo();
k.down(['up', 'w'], function() {
    // Do something cool on the canvas
});

k.up(['enter', 'q'], function() {
    // Do other stuff.
});

마우스 인풋

<canvas id="c" width="200" height="200"></canvas>
var c = document.getElementById('c');
var ctx = c.getContext('2d');
ctx.fillStyle = "white"
ctx.fillRect(0,0,200,200);
ctx.strokeRect(0,0,200,200);


function handleClick(e){
  x = e.clientX - c.offsetLeft - 2.5;
  y = e.clientY - c.offsetTop - 2.5;
  ctx.strokeRect(x,y,5,5);
}

c.addEventListener("click", handleClick, false);

canvas로 게임만들어보자

results matching ""

    No results matching ""