SlideShare a Scribd company logo
1 of 14
Download to read offline
HTML5 Canvas Overview
성용진
웹클라이언트 개발실
2015.10.26
ⓒ 2011 NHNTECHNOLOGY SERVICES CORPORATION
목차
1. HTML5 Canvas 소개 및 특징
1. 소개 및 지원브라우저
2. CanvasRenderingContext2D
3. 즉시모드 / 보류모드
4. Mouse Event처리
2. Canvas 로 할 수 있는 것
1. DrawingShape
2. Pixel Manipulation
3. Animation
3. Canvas와 WebGL (1) (2)
4. Canvas와 Flash
5. Cavnas 적용사례
6. Q & A
3
1-1. HTML5 Canvas 소개 및 특징 ( 소개 및 지원브라우저 )
• Canvas 소개
• Canvas는브라우저에서 지원하는 2D 드로잉 플랫폼이다.
• HTML 요소의하나이며 HTML5에서지원을한다.
• Javascript와HTML 만을 이용하여 구현이 가능하다.
• Bitmap기반이며 즉시모드로 그래픽을 처리한다.
• 그래프를 그리거나 사진합성, 픽셀조작, 에니메이션의 처리가 가능하다.
• Low level의API를제공하여유연한 조작이 가능하나 그만큼 구현이 복잡하다.
• Canvas를지원하는 브라우저
• 모든 모바일 브라우저에서 Canvas 지원
• PC는 IE 8.0 이하는 지원되지 않음(2015년 상반기 국내 IE 8.0 이하 점유율 14%(statcounter ) , 28%( koreahtml5.kr)
4
1-2. HTML5 Canvas 소개 및 특징 ( CanvasRenderingContext2D )
• Canvas와 CanvasRenderingContext2D (이후Context2D 라 칭함 )
• Canvas 객체는 컨테이너로서의 역할만 하며 그래픽능력은 CanvasRenderingContext2D 객체에있다.
• Canvas 객체는 DOM 이지만 Context2D 에 그려지는 그래픽은 DOM으로 접근이 안되고 단지 비트맵일 뿐이다.
var theCanvas = document.getElementById("myCanvas" )
If( !theCanvas || !theCanvas.getContext )
{
}
<canvas id="myCanvas" width="200" height="100"></canvas>
• Canvas를지원하는지 알아보기
• Canvas의그리기 영역인 context가있는지 체크한다
5
1-3. HTML5 Canvas 소개 및 특징 ( 즉시모드 / 보류모드 )
• 즉시모드
• 그래픽 라이브러리는 장면에 그려지는 내부 모델에 대한 어떠한 정보도 유지하지 않는다
• 완성된 그림의 도형을 개별적으로 편집할 수 없으며, 매 프레임마다 전체장면을 다시 그리는 방식이다
• Canvas는즉시모드이다.
• 보류모드
• 그래픽 라이브러리는 렌더링할 내부 모델과 장면 그래프에 대한 정보를 유지한다
• 매 프레임마다 전체장면을 그리지 않고 변화된 부분만 그리게 된다
• Flash, SVG 등은보류모드이다.
< 즉시모드 > < 보류모드 >
6
1-4. HTML5 Canvas 소개 및 특징 ( Mouse Event 처리 )
• Context2D 에 그려진 Shape은픽셀의집합일 뿐이라 Shape에Mouse Event등을 정의하기가 어렵다.
• Flash나SVG 에서는 Shape을객체로 취급하여 다양한 속성과 기능, Event 처리가 가능하다.
var svgElement = document.getElementById("rect1");
svgElement.addEventListener("mouseover", mouseOver);
• Canvas 객체에 Mouse Event를걸며, callback으로들어온정보와 그려진 Shape 정보를비교하여 Event를판별한다.
• Canvas 객체에서 발생된 Mouse Event의 좌표점이 Shape 안에 포함되어 있는지를 조사한다.
canvas.addEventListener("mousemove", mousemove)
function mousemove(e)
{
// canvas를 기준으로 Mouse 위치 계산
var rect = canvas.getBoundingClientRect();
console.log(e.clientX - rect.left);
console.log(e.clientY - rect.top );
// 마우스 좌표가 shape(원) 안에 있는지 판별
// ( 마우스 위치 - 원의 중심) < (원의 반지름의 길이) 라면 원 안에 마우스가 있는 것이다.
}
• Shape 복잡할 경우 context.isPointInPath(x, y ) API를 이용할 수 있으나 성능이 떨어진다.
context.beginPath();
context.arc(150, 120, 100, 0, Math.PI*2, false);
context.arc(150, 120, 50, 0, Math.PI*2, true);
context.isPointInPath(e.offsetX, e.offsetY);
7
2-1. Canvas로 할 수 있는 것 ( Drawing Shape )
• 선, 직사각형, 원, 베지어 곡선을 그리기 위한 강력한 API를제공하여 다양한 Shape를그릴수 있다.
• 단색, 투명도, 그라디언트, 패턴 등으로 Shape을칠할수 있다.
• Shape의이동, 회전, 확대/축소가가능하다.
• transform 함수를 이용하여 Matrix을이용한 Transform이가능하다.
• 도형을 회전 할 경우 도형을 회전하는 것이 아니라 context를 회전하여 그리는 방식이다
< rotate 의 원리>
8
2-2. Canvas로 할 수 있는 것 ( Pixel Manipulation )
• getImageData(x,y,width,height) 메소드를 이용하여 Context2D의pixel 정보에 접근할 수 있다.
• pixel 정보는 배열타입이며 red, green, blue, alpha 값을접근하고 조작할 수 있다.
• 각 pixel 정보를 조작하여 brigtness, grayscale, contrast, saturation의효과를 줄 수 있다.
• RGBA는 각각 1byte의공간을 차지하므로 하나의 pixel은4byte의크기를 가진다
• 반복문으로 4byte 씩 이동하면서 각 픽셀의RGBA 값을 변형시킨다.
< brightness 의 원리>
9
2-3. Canvas로 할 수 있는 것 ( Animation/Game )
• Game에서Animation을표현할 때 Sprite SheetImage를 이용한다.
• drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh) API를이용한다.
ü requestAnimationFrame의사용
• Animation을구현할 때는 window.setInterval(), window.setTimeout()API를사용하지 않는다.
• 위 두 API는 리소스를 많이 사용하는 animation구현시 프레임의 손실이 발생한다.
• setInterval, setTimout의주기와 모니터 주파수 주기가 다를 경우 animation은튀게 된다.
(붉은색 화살표는 화면에 표시가 안 됨)
• window.requestAnimationFrame()은프레임 손실 없게 호출 해 줌 (60FPS)
• requestAnimationFrame은브라우저마다 이름이 약간씩 다르므로 주의가 필요
• webkitRequestAnimationFrame (크롬 ) / mozkitRequestAnimationFrame(파이어폭스)
모니터 주파수 : 60hz (16.7 ms)
setInterval 호출주기 : 10 ms
10
3-1. Canvas와 WebGL ( 1 )
• WebGL은OpenGL ES2.0을 기반으로 한다.
• HTML의Canvas에렌더링을하지만 context는WebGLRenderingContext객체로서
앞의 CanvasRenderingContext2D 와는전혀다른 기능을 가진다.
var canvas = document.getElementById("canvas");
gl = canvas.getContext("webgl");
• PC 는 IE11 이상, FF 4+, Chrome 9+, Safari 5.1+
• 모바일은 iOS 8 이상, Android는 크롬 브라우저 지원(version 30+)
• Javascirpt를이용하지만 OpenGL ShadingLanguage에대한이해가 필요하다.
• GPU는정점 (Vertex) 을 조작( Translate, Transformation)한다à Vertex Shader
• GPU는Rasterize 된Fragment에color를입힌다 à FragmentShader
11
3-2. Canvas와 WebGL ( 2 )
• Vertex Shader에서는 Vertex의조작(Transform, Translation)과
투영(Projecton)이 이루어지는데 Matrix를이용한다.
• 투영은 주로 원근 투영(Perspective Projection)을하여3D상의 정점을
2D로 표현(투영)하게 된다.
• FragmentShader에서는 image로부터Texel (Texture Pixel)를추출하여
Fragment에입힌다
12
4. Canvas와 Flash
• Flash에서 CreateJS Library (http://createjs.com/)를지원하여 Flash와비슷한 개발환경을 제공한다.
• 기존 FlashContents 를 그대로 Canvas로바꿀경우 CreateJS를이용하면디자인 리소스를 그대로 재활용이 가능하다.
• Animation
• FlashTimeline에정의된Animation은그대로Canvas Animation으로전환된다.
• 개발 코드가 없는 static 한 Animation, 광고(Banner)등이 변경 가능하다
• Casual Game
• Flash에서사용한 image asset을재활용 할 수 있다.
• Image는재사용이 가능하나 코드는 재개발이 필요하다.
• Google Swiff
• swf를 upload하면 canvas로변환해준다.
• Animation기반의 banner변환이 주 목적이다.
• https://developers.google.com/swiffy/
13
5. 네이버 Canvas 적용 사례
• 쥬니버 뽀로로 게임
• 쥬니버에서 서비스 중인 PC용 Flash뽀로로 게임 을 Canvas로전환하여모바일에서 서비스 함
• 스포츠 야구
• 네이버 스포츠에서 서비스중인 프로야구 문자 중계 서비스 Flash를Canvas로전환 함 (PC 웹)
Thank you.

More Related Content

What's hot

[145]5년간의네이버웹엔진개발삽질기그리고 김효
[145]5년간의네이버웹엔진개발삽질기그리고 김효[145]5년간의네이버웹엔진개발삽질기그리고 김효
[145]5년간의네이버웹엔진개발삽질기그리고 김효
NAVER D2
 
[C5]deview 2012 nodejs
[C5]deview 2012 nodejs[C5]deview 2012 nodejs
[C5]deview 2012 nodejs
NAVER D2
 
캠프앱 개발 사례를 통해 본 하이브리드앱 어디까지 | Devon 2012
캠프앱 개발 사례를 통해 본 하이브리드앱 어디까지 | Devon 2012캠프앱 개발 사례를 통해 본 하이브리드앱 어디까지 | Devon 2012
캠프앱 개발 사례를 통해 본 하이브리드앱 어디까지 | Devon 2012
Daum DNA
 
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화
흥래 김
 
모바일 무한 스크롤 개발
모바일 무한 스크롤 개발모바일 무한 스크롤 개발
모바일 무한 스크롤 개발
NAVER D2
 

What's hot (20)

현실적 PWA
현실적 PWA현실적 PWA
현실적 PWA
 
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
 
오늘 당장 시작하는 HTML5
오늘 당장 시작하는 HTML5오늘 당장 시작하는 HTML5
오늘 당장 시작하는 HTML5
 
Service Worker 101 (한국어)
Service Worker 101 (한국어)Service Worker 101 (한국어)
Service Worker 101 (한국어)
 
목적에 맞게 Angular, React, Vue
목적에 맞게 Angular, React, Vue목적에 맞게 Angular, React, Vue
목적에 맞게 Angular, React, Vue
 
Node.js + Websocket 삽질기
Node.js + Websocket 삽질기Node.js + Websocket 삽질기
Node.js + Websocket 삽질기
 
[111217 아꿈사연말모임] 웹소켓과온라인게임
[111217 아꿈사연말모임] 웹소켓과온라인게임[111217 아꿈사연말모임] 웹소켓과온라인게임
[111217 아꿈사연말모임] 웹소켓과온라인게임
 
[145]5년간의네이버웹엔진개발삽질기그리고 김효
[145]5년간의네이버웹엔진개발삽질기그리고 김효[145]5년간의네이버웹엔진개발삽질기그리고 김효
[145]5년간의네이버웹엔진개발삽질기그리고 김효
 
[C5]deview 2012 nodejs
[C5]deview 2012 nodejs[C5]deview 2012 nodejs
[C5]deview 2012 nodejs
 
[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈
 
우리가 몰랐던 크롬 개발자 도구
우리가 몰랐던 크롬 개발자 도구우리가 몰랐던 크롬 개발자 도구
우리가 몰랐던 크롬 개발자 도구
 
캠프앱 개발 사례를 통해 본 하이브리드앱 어디까지 | Devon 2012
캠프앱 개발 사례를 통해 본 하이브리드앱 어디까지 | Devon 2012캠프앱 개발 사례를 통해 본 하이브리드앱 어디까지 | Devon 2012
캠프앱 개발 사례를 통해 본 하이브리드앱 어디까지 | Devon 2012
 
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화
 
Deview2013 track1 session7
Deview2013 track1 session7Deview2013 track1 session7
Deview2013 track1 session7
 
자바스크립트의 또다른 발전, Backbone.js
자바스크립트의 또다른 발전, Backbone.js자바스크립트의 또다른 발전, Backbone.js
자바스크립트의 또다른 발전, Backbone.js
 
Single-page Application
Single-page ApplicationSingle-page Application
Single-page Application
 
응답하라 반응형웹 - 4. angular
응답하라 반응형웹 - 4. angular응답하라 반응형웹 - 4. angular
응답하라 반응형웹 - 4. angular
 
모바일 무한 스크롤 개발
모바일 무한 스크롤 개발모바일 무한 스크롤 개발
모바일 무한 스크롤 개발
 
2017. 프론트엔드 트랜드
2017. 프론트엔드 트랜드2017. 프론트엔드 트랜드
2017. 프론트엔드 트랜드
 

Similar to [Naver d2]html5 canvas overview

Html5 소개 가이드
Html5 소개 가이드Html5 소개 가이드
Html5 소개 가이드
Jong-hyun Park
 

Similar to [Naver d2]html5 canvas overview (20)

jhj port.
jhj port.jhj port.
jhj port.
 
20131217 html5
20131217 html520131217 html5
20131217 html5
 
자바병렬프로그래밍 9.gui 애플리케이션
자바병렬프로그래밍 9.gui 애플리케이션자바병렬프로그래밍 9.gui 애플리케이션
자바병렬프로그래밍 9.gui 애플리케이션
 
Html5 소개 가이드
Html5 소개 가이드Html5 소개 가이드
Html5 소개 가이드
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
 
Create App Easier With SVC Pattern - DroidKnights 2019 @Seoul
Create App Easier With SVC Pattern - DroidKnights 2019 @SeoulCreate App Easier With SVC Pattern - DroidKnights 2019 @Seoul
Create App Easier With SVC Pattern - DroidKnights 2019 @Seoul
 
[122]책에서는 맛볼 수 없는 HTML5 Canvas 이야기
[122]책에서는 맛볼 수 없는 HTML5 Canvas 이야기 [122]책에서는 맛볼 수 없는 HTML5 Canvas 이야기
[122]책에서는 맛볼 수 없는 HTML5 Canvas 이야기
 
웹 기반 하이퍼포먼스 그래픽 처리 - 문경두
웹 기반 하이퍼포먼스 그래픽 처리 - 문경두웹 기반 하이퍼포먼스 그래픽 처리 - 문경두
웹 기반 하이퍼포먼스 그래픽 처리 - 문경두
 
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
 
제 5회 DGMIT R&D 컨퍼런스: HTML Graphics AP
 제 5회 DGMIT R&D 컨퍼런스: HTML Graphics AP 제 5회 DGMIT R&D 컨퍼런스: HTML Graphics AP
제 5회 DGMIT R&D 컨퍼런스: HTML Graphics AP
 
고성능 애니메이션 개발 기법 및 성능 최적화
고성능 애니메이션 개발 기법 및 성능 최적화고성능 애니메이션 개발 기법 및 성능 최적화
고성능 애니메이션 개발 기법 및 성능 최적화
 
Html5 canvas sprite animation
Html5 canvas sprite animationHtml5 canvas sprite animation
Html5 canvas sprite animation
 
자바 병렬 프로그래밍 ch9
자바 병렬 프로그래밍 ch9자바 병렬 프로그래밍 ch9
자바 병렬 프로그래밍 ch9
 
Decentraland Software Development Kit(SDK) 2.0 버전
Decentraland Software Development Kit(SDK) 2.0 버전Decentraland Software Development Kit(SDK) 2.0 버전
Decentraland Software Development Kit(SDK) 2.0 버전
 
Front end engineer
Front end engineerFront end engineer
Front end engineer
 
Android와 Flutter 앱 개발의 큰 차이점 5가지
Android와 Flutter 앱 개발의 큰 차이점 5가지Android와 Flutter 앱 개발의 큰 차이점 5가지
Android와 Flutter 앱 개발의 큰 차이점 5가지
 
Html5 canvas introduction
Html5 canvas introductionHtml5 canvas introduction
Html5 canvas introduction
 
[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기
 
Nexacro
NexacroNexacro
Nexacro
 
Tizen UIFW - EFL
Tizen UIFW - EFLTizen UIFW - EFL
Tizen UIFW - EFL
 

More from NAVER D2

More from NAVER D2 (20)

[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다
 
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기
 
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
 
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기
 
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingOld version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
 
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화[224]네이버 검색과 개인화
[224]네이버 검색과 개인화
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
 
[213] Fashion Visual Search
[213] Fashion Visual Search[213] Fashion Visual Search
[213] Fashion Visual Search
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?
 

Recently uploaded

Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
Wonjun Hwang
 

Recently uploaded (7)

Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption
 

[Naver d2]html5 canvas overview

  • 1. HTML5 Canvas Overview 성용진 웹클라이언트 개발실 2015.10.26 ⓒ 2011 NHNTECHNOLOGY SERVICES CORPORATION
  • 2. 목차 1. HTML5 Canvas 소개 및 특징 1. 소개 및 지원브라우저 2. CanvasRenderingContext2D 3. 즉시모드 / 보류모드 4. Mouse Event처리 2. Canvas 로 할 수 있는 것 1. DrawingShape 2. Pixel Manipulation 3. Animation 3. Canvas와 WebGL (1) (2) 4. Canvas와 Flash 5. Cavnas 적용사례 6. Q & A
  • 3. 3 1-1. HTML5 Canvas 소개 및 특징 ( 소개 및 지원브라우저 ) • Canvas 소개 • Canvas는브라우저에서 지원하는 2D 드로잉 플랫폼이다. • HTML 요소의하나이며 HTML5에서지원을한다. • Javascript와HTML 만을 이용하여 구현이 가능하다. • Bitmap기반이며 즉시모드로 그래픽을 처리한다. • 그래프를 그리거나 사진합성, 픽셀조작, 에니메이션의 처리가 가능하다. • Low level의API를제공하여유연한 조작이 가능하나 그만큼 구현이 복잡하다. • Canvas를지원하는 브라우저 • 모든 모바일 브라우저에서 Canvas 지원 • PC는 IE 8.0 이하는 지원되지 않음(2015년 상반기 국내 IE 8.0 이하 점유율 14%(statcounter ) , 28%( koreahtml5.kr)
  • 4. 4 1-2. HTML5 Canvas 소개 및 특징 ( CanvasRenderingContext2D ) • Canvas와 CanvasRenderingContext2D (이후Context2D 라 칭함 ) • Canvas 객체는 컨테이너로서의 역할만 하며 그래픽능력은 CanvasRenderingContext2D 객체에있다. • Canvas 객체는 DOM 이지만 Context2D 에 그려지는 그래픽은 DOM으로 접근이 안되고 단지 비트맵일 뿐이다. var theCanvas = document.getElementById("myCanvas" ) If( !theCanvas || !theCanvas.getContext ) { } <canvas id="myCanvas" width="200" height="100"></canvas> • Canvas를지원하는지 알아보기 • Canvas의그리기 영역인 context가있는지 체크한다
  • 5. 5 1-3. HTML5 Canvas 소개 및 특징 ( 즉시모드 / 보류모드 ) • 즉시모드 • 그래픽 라이브러리는 장면에 그려지는 내부 모델에 대한 어떠한 정보도 유지하지 않는다 • 완성된 그림의 도형을 개별적으로 편집할 수 없으며, 매 프레임마다 전체장면을 다시 그리는 방식이다 • Canvas는즉시모드이다. • 보류모드 • 그래픽 라이브러리는 렌더링할 내부 모델과 장면 그래프에 대한 정보를 유지한다 • 매 프레임마다 전체장면을 그리지 않고 변화된 부분만 그리게 된다 • Flash, SVG 등은보류모드이다. < 즉시모드 > < 보류모드 >
  • 6. 6 1-4. HTML5 Canvas 소개 및 특징 ( Mouse Event 처리 ) • Context2D 에 그려진 Shape은픽셀의집합일 뿐이라 Shape에Mouse Event등을 정의하기가 어렵다. • Flash나SVG 에서는 Shape을객체로 취급하여 다양한 속성과 기능, Event 처리가 가능하다. var svgElement = document.getElementById("rect1"); svgElement.addEventListener("mouseover", mouseOver); • Canvas 객체에 Mouse Event를걸며, callback으로들어온정보와 그려진 Shape 정보를비교하여 Event를판별한다. • Canvas 객체에서 발생된 Mouse Event의 좌표점이 Shape 안에 포함되어 있는지를 조사한다. canvas.addEventListener("mousemove", mousemove) function mousemove(e) { // canvas를 기준으로 Mouse 위치 계산 var rect = canvas.getBoundingClientRect(); console.log(e.clientX - rect.left); console.log(e.clientY - rect.top ); // 마우스 좌표가 shape(원) 안에 있는지 판별 // ( 마우스 위치 - 원의 중심) < (원의 반지름의 길이) 라면 원 안에 마우스가 있는 것이다. } • Shape 복잡할 경우 context.isPointInPath(x, y ) API를 이용할 수 있으나 성능이 떨어진다. context.beginPath(); context.arc(150, 120, 100, 0, Math.PI*2, false); context.arc(150, 120, 50, 0, Math.PI*2, true); context.isPointInPath(e.offsetX, e.offsetY);
  • 7. 7 2-1. Canvas로 할 수 있는 것 ( Drawing Shape ) • 선, 직사각형, 원, 베지어 곡선을 그리기 위한 강력한 API를제공하여 다양한 Shape를그릴수 있다. • 단색, 투명도, 그라디언트, 패턴 등으로 Shape을칠할수 있다. • Shape의이동, 회전, 확대/축소가가능하다. • transform 함수를 이용하여 Matrix을이용한 Transform이가능하다. • 도형을 회전 할 경우 도형을 회전하는 것이 아니라 context를 회전하여 그리는 방식이다 < rotate 의 원리>
  • 8. 8 2-2. Canvas로 할 수 있는 것 ( Pixel Manipulation ) • getImageData(x,y,width,height) 메소드를 이용하여 Context2D의pixel 정보에 접근할 수 있다. • pixel 정보는 배열타입이며 red, green, blue, alpha 값을접근하고 조작할 수 있다. • 각 pixel 정보를 조작하여 brigtness, grayscale, contrast, saturation의효과를 줄 수 있다. • RGBA는 각각 1byte의공간을 차지하므로 하나의 pixel은4byte의크기를 가진다 • 반복문으로 4byte 씩 이동하면서 각 픽셀의RGBA 값을 변형시킨다. < brightness 의 원리>
  • 9. 9 2-3. Canvas로 할 수 있는 것 ( Animation/Game ) • Game에서Animation을표현할 때 Sprite SheetImage를 이용한다. • drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh) API를이용한다. ü requestAnimationFrame의사용 • Animation을구현할 때는 window.setInterval(), window.setTimeout()API를사용하지 않는다. • 위 두 API는 리소스를 많이 사용하는 animation구현시 프레임의 손실이 발생한다. • setInterval, setTimout의주기와 모니터 주파수 주기가 다를 경우 animation은튀게 된다. (붉은색 화살표는 화면에 표시가 안 됨) • window.requestAnimationFrame()은프레임 손실 없게 호출 해 줌 (60FPS) • requestAnimationFrame은브라우저마다 이름이 약간씩 다르므로 주의가 필요 • webkitRequestAnimationFrame (크롬 ) / mozkitRequestAnimationFrame(파이어폭스) 모니터 주파수 : 60hz (16.7 ms) setInterval 호출주기 : 10 ms
  • 10. 10 3-1. Canvas와 WebGL ( 1 ) • WebGL은OpenGL ES2.0을 기반으로 한다. • HTML의Canvas에렌더링을하지만 context는WebGLRenderingContext객체로서 앞의 CanvasRenderingContext2D 와는전혀다른 기능을 가진다. var canvas = document.getElementById("canvas"); gl = canvas.getContext("webgl"); • PC 는 IE11 이상, FF 4+, Chrome 9+, Safari 5.1+ • 모바일은 iOS 8 이상, Android는 크롬 브라우저 지원(version 30+) • Javascirpt를이용하지만 OpenGL ShadingLanguage에대한이해가 필요하다. • GPU는정점 (Vertex) 을 조작( Translate, Transformation)한다à Vertex Shader • GPU는Rasterize 된Fragment에color를입힌다 à FragmentShader
  • 11. 11 3-2. Canvas와 WebGL ( 2 ) • Vertex Shader에서는 Vertex의조작(Transform, Translation)과 투영(Projecton)이 이루어지는데 Matrix를이용한다. • 투영은 주로 원근 투영(Perspective Projection)을하여3D상의 정점을 2D로 표현(투영)하게 된다. • FragmentShader에서는 image로부터Texel (Texture Pixel)를추출하여 Fragment에입힌다
  • 12. 12 4. Canvas와 Flash • Flash에서 CreateJS Library (http://createjs.com/)를지원하여 Flash와비슷한 개발환경을 제공한다. • 기존 FlashContents 를 그대로 Canvas로바꿀경우 CreateJS를이용하면디자인 리소스를 그대로 재활용이 가능하다. • Animation • FlashTimeline에정의된Animation은그대로Canvas Animation으로전환된다. • 개발 코드가 없는 static 한 Animation, 광고(Banner)등이 변경 가능하다 • Casual Game • Flash에서사용한 image asset을재활용 할 수 있다. • Image는재사용이 가능하나 코드는 재개발이 필요하다. • Google Swiff • swf를 upload하면 canvas로변환해준다. • Animation기반의 banner변환이 주 목적이다. • https://developers.google.com/swiffy/
  • 13. 13 5. 네이버 Canvas 적용 사례 • 쥬니버 뽀로로 게임 • 쥬니버에서 서비스 중인 PC용 Flash뽀로로 게임 을 Canvas로전환하여모바일에서 서비스 함 • 스포츠 야구 • 네이버 스포츠에서 서비스중인 프로야구 문자 중계 서비스 Flash를Canvas로전환 함 (PC 웹)