standards.next: canvas

67
Standards.Ne Standards.Ne xt: xt: HTML5 Canvas HTML5 Canvas Martin Kliehm @kliehm Martin Kliehm @kliehm Senior Frontend Senior Frontend Engineer. Namics. Engineer. Namics. Photo: Spencer Eakin http://www.flickr.com/photos/true2death/244309 118/

Upload: martin-kliehm

Post on 15-May-2015

15.938 views

Category:

Technology


2 download

DESCRIPTION

My presentation about the HTML5 canvas element at the Standards.Next Meetup in London, 27 June 2009. Current and future implementations of canvas in games, applications, and video.

TRANSCRIPT

Page 1: Standards.Next: Canvas

Standards.Next:Standards.Next:HTML5 CanvasHTML5 Canvas

Martin Kliehm @kliehmMartin Kliehm @kliehmSenior Frontend Engineer. Senior Frontend Engineer. Namics.Namics. Photo: Spencer Eakin

http://www.flickr.com/photos/true2death/244309118/

Page 2: Standards.Next: Canvas

What’s a canvas?

Page 3: Standards.Next: Canvas
Page 4: Standards.Next: Canvas

For IE: excanvas.js (limited)(Google) Gears

Page 5: Standards.Next: Canvas

http://philip.html5.org/tests/canvas/suite/tests/results.htmlhttp://philip.html5.org/tests/canvas/suite/tests/results.html

Page 6: Standards.Next: Canvas

http://flickr.com/photos/tais/2411643409/

Page 7: Standards.Next: Canvas

You can draw on it.

Page 8: Standards.Next: Canvas
Page 9: Standards.Next: Canvas

Boring.

Page 10: Standards.Next: Canvas

Better.

Page 11: Standards.Next: Canvas

You can put photos on it.

Page 12: Standards.Next: Canvas

<canvas id="canvas" width="500" height="350"> <img src="fallback.jpg" width="500" height="350" alt="Pulp Fiction Minifigs" /></canvas>

http://www.flickr.com/photos/minifig/72091618/

Page 13: Standards.Next: Canvas

<script type="text/javascript"> var canvas = document.getElementById( 'canvas' ); if ( canvas.getContext ) { var ctx = canvas.getContext( '2d' ); ctx.drawImage( img, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight ); }</script>

Page 14: Standards.Next: Canvas

http://flickr.com/photos/tais/2411643409/http://flickr.com/photos/energeticspell/2332820792/

Page 15: Standards.Next: Canvas

You can do creative things with a canvas.

Page 16: Standards.Next: Canvas
Page 17: Standards.Next: Canvas

var canvas = document.getElementById('canvas');

if ( canvas.getContext ) { // Get the image object var img = document.images[0];

// Set canvas 2D context

var ctx = canvas.getContext( '2d' );

/* Draw image: drawImage( * image object, sx, sy, sWidth,

sHeight, * dx, dy, dWidth, dHeight) */

ctx.drawImage( img, 0, 0, img.width, img.height, 0, 0, img.width, img.height );

// Save current state ctx.save();

[...]

Page 18: Standards.Next: Canvas

[...]

// Draw mirror image

// Restore saved state ctx.restore();

// Flip vertically: scale(x,y) ctx.scale( 1, -1 );

// Move beneath the original image ctx.translate( 0, -img.height );

// Draw mirror image ctx.drawImage(

img, 0, 0, img.width, img.height, 0, -img.height, img.width, img.height );

[...]

Page 19: Standards.Next: Canvas

[...]

// Drawing the fading gradient // Restore saved state ctx.restore();

// Flip vertically: scale(x,y) ctx.scale( 1, -1 );

// Draw gradient var mirrorHeight = img.height * 0.5;

var gradient = ctx.createLinearGradient( 0, 0, 0, mirrorHeight );

gradient.addColorStop( 0, 'rgba( 0, 0, 0, 0.5 )' );

gradient.addColorStop( 1, 'rgba( 0, 0, 0, 1.0 )' );

// Fill rectangle with gradient

ctx.fillStyle = gradient;

ctx.rect( 0, 0, img.width, mirrorHeight );

ctx.fill();

}

Page 20: Standards.Next: Canvas

You can distort it.

Page 21: Standards.Next: Canvas
Page 22: Standards.Next: Canvas

/* transform( * scaleX, skewY, skewX, scaleY, * translateX, translateY ) */

ctx.transform( 1, Math.PI * 2 / 18, 0, 1, 0, 0 );

Page 23: Standards.Next: Canvas

What’s a canvas, really?

Page 24: Standards.Next: Canvas

“It’s like havinga little Apple ][in your browser.”http://www.oblomovka.com/wp/2008/08/08/the-edge-at-sxsw/http://www.oblomovka.com/wp/2008/08/08/the-edge-at-sxsw/

Page 25: Standards.Next: Canvas

css3-safari-coverflow-pbakaus.avihttp://paulbakaus.com/2008/05/31/coverflow-anyone/

Page 26: Standards.Next: Canvas

http://hacks.mozilla.org/2009/06/3d-transforms-isocube/http://hacks.mozilla.org/2009/06/3d-transforms-isocube/

Page 27: Standards.Next: Canvas

http://radnan.public.iastate.edu/plotr/http://www.500null.com/?p=16

Page 28: Standards.Next: Canvas

Manipulation.

Page 29: Standards.Next: Canvas

http://www.ernestdelgado.com/archive/drag-and-drop-without-drag-and-drop/http://www.ernestdelgado.com/archive/drag-and-drop-without-drag-and-drop/

Page 30: Standards.Next: Canvas

http://www.ernestdelgado.com/public-tests/canvasphoto/demo/canvas.htmlhttp://www.ernestdelgado.com/public-tests/canvasphoto/demo/canvas.html

Page 31: Standards.Next: Canvas

http://www.bluishcoder.co.nz/2008/09/javascript-space-invaders-emulator.html

Page 32: Standards.Next: Canvas

Text.

Page 33: Standards.Next: Canvas

http://myles.eftos.id.au/experiments/font_render.html

Page 34: Standards.Next: Canvas

https://developer.mozilla.org/En/Drawing_text_using_a_canvas

Page 35: Standards.Next: Canvas

http://www.cameronmoll.com/articles/cufon/http://cufon.shoqolate.com/generate/

Page 36: Standards.Next: Canvas

http://bespin.mozilla.com

Page 37: Standards.Next: Canvas

http://www.flickr.com/photos/tussenpozen/144712446/in/set-560609/http://www.paciellogroup.com/blog/?p=362http://esw.w3.org/topic/HTML/AddedElementCanvas

Page 38: Standards.Next: Canvas

http://www.codeplex.com/MsaaVerify

Page 39: Standards.Next: Canvas

Filters.

http://labs.pimsworld.org/2009/05/a-javascript-implementation-of-the-content-aware-image-resizing-algorithm/

Page 40: Standards.Next: Canvas

Applications.

Page 41: Standards.Next: Canvas

Applications.

http://openstreetmap.orghttp://ernestdelgado.com/public-tests/ canvas-gpsmap/

Page 42: Standards.Next: Canvas

http://www.ernestdelgado.com/gmaps/canvas/ddemo1.html

http://www.borismus.com/canvas-vs-svg-performance/http://groups.google.com/group/Google-Maps-API/msg/3599cee1f7190e30

Page 43: Standards.Next: Canvas

3D Canvas.

Page 44: Standards.Next: Canvas

!=

Page 45: Standards.Next: Canvas

Slices

http://yuiblog.com/blog/2008/06/23/slicing/

Page 46: Standards.Next: Canvas

http://flickr.com/photos/jerizm/2602242647/

Page 47: Standards.Next: Canvas
Page 48: Standards.Next: Canvas

http://www.blarnee.com/projects/cflow/http://www.ernestdelgado.com/archive/chromeflow/

Page 49: Standards.Next: Canvas
Page 50: Standards.Next: Canvas
Page 51: Standards.Next: Canvas

http://aggpas.org/aggpas-demo.htmhttp://www.lomont.org/Math/Papers/2003/InvSqrt.pdf

Page 52: Standards.Next: Canvas

http://en.wikipedia.org/wiki/Texture_mapping

Page 53: Standards.Next: Canvas

http://blog.nihilogic.dk/2008/04/javascript-wolfenstein-3d.html

Page 54: Standards.Next: Canvas

http://www.flipcode.com/archives/3D_Graphics_on_Mobile_Devices-Part_3_Polygon_Graphics.shtml

Page 55: Standards.Next: Canvas

jsgl.js

/* Apply the affine 3x4 matrix transform to point |p|. |p| should

* be a 3 element array, and |t| should be a 16 element array...

* Technically transformations should be a 4x4 matrix for

* homogeneous coordinates, but we're not currently using the

* extra abilities so we can keep things cheaper by avoiding the

* extra row of calculations.

*/

function applyRotation( t, p ) {

return {

x: t.e0 * p.x + t.e4 * p.y + t.e8 * p.z,

y: t.e1 * p.x + t.e5 * p.y + t.e9 * p.z,

z: t.e2 * p.x + t.e6 * p.y + t.e10 * p.z

};

}

Matrix Math.

Page 56: Standards.Next: Canvas

http://lbi.lostboys.nl/blog/artikelen/canvas-in-full-3d/

Page 57: Standards.Next: Canvas

http://tulrich.com/geekstuff/canvas/perspective.html

Page 58: Standards.Next: Canvas

The future: real 3D.

Page 59: Standards.Next: Canvas

http://my.opera.com/timjoh/blog/2007/11/13/taking-the-canvas-to-another-dimension

Page 60: Standards.Next: Canvas

http://my.opera.com/timjoh/blog/2007/11/13/taking-the-canvas-to-another-dimensionhttps://wiki.mozilla.org/Canvas:3D

Page 61: Standards.Next: Canvas

http://blog.largeanimal.com/demo/http://www.youtube.com/watch?v=uofWfXOzX-g

http://code.google.com/apis/o3d/

Page 62: Standards.Next: Canvas

Video.

Page 63: Standards.Next: Canvas

https://developer.mozilla.org/samples/video/chroma-key/index.xhtml (Firefox 3.5 required)

Page 64: Standards.Next: Canvas

http://people.opera.com/howcome/2007/video/svg/video-filter.svg (special version of Opera 9.5 required)

Page 65: Standards.Next: Canvas

http://www.youtube.com/watch?v=ib_g7F6WKAA

Page 66: Standards.Next: Canvas

http://labs.opera.com/news/2009/04/01/

Page 67: Standards.Next: Canvas

Thank you.

twitter: @kliehmLinks: delicious.com/kliehm/standardsnextVideos: flic.kr/p/6AeoAT