ݺߣ

ݺߣShare a Scribd company logo
80줄로 웹지엘
입문하기
canvas
javascript
WebGL Library
GLSL
개발환경
WEBGL
WebGL 프로그래밍을 한다는 것은?
javascript로 만들어진 데이터를 기반으로
javscript형식의 webGL API를 통해 GPU를 동작시키는것
javascript GLSL
1. Context3D 검색
2. 렌더러 준비
var gl = canvas.getContext(‘webgl’) // webgl Context 요청
gl.drawArray() // 전용 API
function render(){
gl.clearColor(Math.random(),Math.random(),Math.random(), 1)
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT)
}
setInterval(render,16)
GPU 그래픽스의 기본
삼각형을 그려서 어떠한 형상을 그려내는 것
GPU 그래픽스의 기본
문제는
CPU에 있는 데이터를
GPU에 어떻게 전달/실행 시킬 것인가
버퍼(Buffer)
쉐이더(󲹻)
프로그램(Program)
유니폼(Uniform)
Viewport
Canvas Area
-1 1
-1
1
Bs webgl소모임001 uniform버전
배열 버퍼
버퍼(Buffer)
HOW TO..
var triangleData = [ 0.0, 1.0, 0.0, -1.0, -1.0, 0.0, 1.0, -1.0, 0.0 ]
var triangleBuffer = gl.createBuffer()
// 1.버퍼생성
gl.bindBuffer(gl.ARRAY_BUFFER,triangleBuffer)
// 2.버퍼를 GPU에 바인딩
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(triangleData),gl.STATIC_DRAW)
// 3.버퍼에 데이터를 입력
triangleBuffer.itemSize = 3
triangleBuffer.numItem = 3
// 4.생성된 버퍼를 담아둔 JS 오브젝트에 추가정보입력
Bs webgl소모임001 uniform버전
쉐이더(󲹻)
쉐이더(󲹻)
Geometry
Vertex Shader
쉐이더(󲹻)
Fragment Shader
Vertex Shader Fragment Shader
레스터 라이즈
HOW TO..
var firstShader = gl.createShader(gl.VERTEX_SHADER)
gl.shaderSource(firstShader, 쉐이더소스)
gl.compileShader(firstShader)
컴파일을 왜 해?
GPU입장에서 넘어온 데이터는 단순 문자열!
이게 프로그램이니 컴파일을 해두라고 명령… 쉐이더
HOW TO..
var vertexShaderStr = ""+
"attribute vec3 aVertexPosition;" +
"void main(void) {" +
" gl_Position = vec4(aVertexPosition, 1.0);" +
"}“
버텍스 쉐이더의 최종 목적 : gl_Position
HOW TO..
var fragmentShaderStr = ""+
"void main(void) {" +
" gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);" +
"}"
프래그먼트 쉐이더의 최종 목적 : gl_FragColor
프로그램(program)
var firstProgram = gl.createProgram()
gl.attachShader(firstProgram , vertexShader)
gl.attachShader(firstProgram, fragmentShader)
gl.linkProgram(firstProgram)
firstProgram.aVertexPosition =
gl.getAttribLocation(firstProgram, "aVertexPosition");
Renderer Update
gl.useProgram(fristProgram)
gl.bindBuffer(gl.ARRAY_BUFFER, triangleBuffer)
gl.useProgram(fristProgram)
gl.bindBuffer(gl.ARRAY_BUFFER, triangleBuffer)
gl.enableVertexAttribArray(firstProgram.aVertexPosition)
gl.vertexAttribPointer(
firstProgram.aVertexPosition,
triangleBuffer.itemSize, // x,y,z
gl.FLOAT, false, 0, 0
)
gl.useProgram(fristProgram)
gl.bindBuffer(gl.ARRAY_BUFFER, triangleBuffer)
gl.enableVertexAttribArray(firstProgram.aVertexPosition)
gl.vertexAttribPointer(firstProgram.aVertexPosition, triangleBuffer.itemSize, gl.FLOAT, false, 0, 0)
gl.drawArrays(gl.TRIANGLES, 0, triangleBuffer.numItem)
코드 리뷰
유니폼(uniform) Draw가 진행되는 동안 상수처럼 유지되는 변수
var vertexShaderStr = "" +
"attribute vec3 aVertexPosition;" +
"uniform vec3 uRotation;" +
"uniform vec3 uPosition;" +
…
firstProgram.uRotation = gl.getUniformLocation(firstProgram, "uRotation");
firstProgram.uPosition = gl.getUniformLocation(firstProgram, "uPosition");
유니폼(uniform) Draw가 진행되는 동안 상수처럼 유지되는 변수
"void main(void) {" +
" gl_Position = " +
" positionMTX(uPosition) * " +
" rotationMTX(uRotation) * " +
" vec4(aVertexPosition, 1.0);" +
"}"
유니폼(uniform) Draw가 진행되는 동안 상수처럼 유지되는 변수
var rotation = 0
var position = 0
function render() {
.. 생략
gl.vertexAttribPointer(firstProgram.aVertexPosition, triangleBuffer.itemSize, gl.FLOAT, false, 0, 0);
rotation += 0.1
position += 0.1
gl.uniform3fv(firstProgram.uRotation, [rotation, rotation, rotation])
gl.uniform3fv(firstProgram.uPosition, [Math.sin(position), Math.cos(position), 0])
gl.drawArrays(gl.TRIANGLES, 0, triangleBuffer.numItem);
}
유니폼(uniform) Draw가 진행되는 동안 상수처럼 유지되는 변수
gl.uniform3fv(firstProgram.uRotation, [rotation, rotation, rotation])
gl.uniform3fv(firstProgram.uPosition, [Math.sin(position), Math.cos(position), 0])
gl.drawArrays(gl.TRIANGLES, 0, triangleBuffer.numItem);
gl.uniform3fv(firstProgram.uRotation, [0, 0, 0])
gl.uniform3fv(firstProgram.uPosition, [0, 0, 0])
gl.drawArrays(gl.TRIANGLES, 0, triangleBuffer.numItem);
End
Bswebgl.com – 런치프로젝트 webGL
https://www.facebook.com/groups/bs5js/
Ad

Recommended

Bs webgl소모임002
Bs webgl소모임002
Seonki Paik
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
beom kyun choi
WebGL 20150406
WebGL 20150406
Jun Ho Lee
What is the meteor?
What is the meteor?
Peter YoungSik Yun
6장 performance of game_최준혁_2
6장 performance of game_최준혁_2
Mark Choi
Node.js 현재와 미래
Node.js 현재와 미래
JeongHun Byeon
Node.js and react
Node.js and react
HyungKuIm
제 5회 Lisp 세미나 - 클로저 개발팀을 위한 지속적인 통합
제 5회 Lisp 세미나 - 클로저 개발팀을 위한 지속적인 통합
NAVER D2
Clean Front-End Development
Clean Front-End Development
지수 윤
개발자의 컴퓨터
개발자의 컴퓨터
jaehyok Song
Vuejs 시작하기
Vuejs 시작하기
성일 한
[하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발
[하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발
정석 양
Node.js at OKJSP
Node.js at OKJSP
JeongHun Byeon
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs
기동 이
Node.js
Node.js
ymtech
Resource Handling in Spring MVC
Resource Handling in Spring MVC
Arawn Park
Geo server 성능향상을 위한 튜닝 기법 20111028
Geo server 성능향상을 위한 튜닝 기법 20111028
BJ Jang
Nest js 101
Nest js 101
Daniel Lim
[115] clean fe development_윤지수
[115] clean fe development_윤지수
NAVER D2
React native 개발 및 javascript 기본
React native 개발 및 javascript 기본
Tj .
ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기
Taegon Kim
파이썬 언어 기초
파이썬 언어 기초
beom kyun choi
GraphQL overview #2
GraphQL overview #2
기동 이
Leadweb Nodejs
Leadweb Nodejs
근호 최
[131]chromium binging 기술을 node.js에 적용해보자
[131]chromium binging 기술을 node.js에 적용해보자
NAVER D2
GraphQL overview
GraphQL overview
기동 이
Secrets of the JavaScript Ninja - Chapter 12. DOM modification
Secrets of the JavaScript Ninja - Chapter 12. DOM modification
Hyuncheol Jeon
웃으면서ʲٳDz
웃으면서ʲٳDz
Jiyoon Kim
[1A3]지금까지 상상한 표현의 한계를 넘자 WebGL
[1A3]지금까지 상상한 표현의 한계를 넘자 WebGL
NAVER D2
쉽게 풀어보는 WebGL
쉽게 풀어보는 WebGL
Myung Woon Oh

More Related Content

What's hot (20)

Clean Front-End Development
Clean Front-End Development
지수 윤
개발자의 컴퓨터
개발자의 컴퓨터
jaehyok Song
Vuejs 시작하기
Vuejs 시작하기
성일 한
[하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발
[하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발
정석 양
Node.js at OKJSP
Node.js at OKJSP
JeongHun Byeon
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs
기동 이
Node.js
Node.js
ymtech
Resource Handling in Spring MVC
Resource Handling in Spring MVC
Arawn Park
Geo server 성능향상을 위한 튜닝 기법 20111028
Geo server 성능향상을 위한 튜닝 기법 20111028
BJ Jang
Nest js 101
Nest js 101
Daniel Lim
[115] clean fe development_윤지수
[115] clean fe development_윤지수
NAVER D2
React native 개발 및 javascript 기본
React native 개발 및 javascript 기본
Tj .
ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기
Taegon Kim
파이썬 언어 기초
파이썬 언어 기초
beom kyun choi
GraphQL overview #2
GraphQL overview #2
기동 이
Leadweb Nodejs
Leadweb Nodejs
근호 최
[131]chromium binging 기술을 node.js에 적용해보자
[131]chromium binging 기술을 node.js에 적용해보자
NAVER D2
GraphQL overview
GraphQL overview
기동 이
Secrets of the JavaScript Ninja - Chapter 12. DOM modification
Secrets of the JavaScript Ninja - Chapter 12. DOM modification
Hyuncheol Jeon
웃으면서ʲٳDz
웃으면서ʲٳDz
Jiyoon Kim
Clean Front-End Development
Clean Front-End Development
지수 윤
[하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발
[하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발
정석 양
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs
기동 이
Resource Handling in Spring MVC
Resource Handling in Spring MVC
Arawn Park
Geo server 성능향상을 위한 튜닝 기법 20111028
Geo server 성능향상을 위한 튜닝 기법 20111028
BJ Jang
[115] clean fe development_윤지수
[115] clean fe development_윤지수
NAVER D2
React native 개발 및 javascript 기본
React native 개발 및 javascript 기본
Tj .
ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기
Taegon Kim
[131]chromium binging 기술을 node.js에 적용해보자
[131]chromium binging 기술을 node.js에 적용해보자
NAVER D2
Secrets of the JavaScript Ninja - Chapter 12. DOM modification
Secrets of the JavaScript Ninja - Chapter 12. DOM modification
Hyuncheol Jeon

Viewers also liked (12)

[1A3]지금까지 상상한 표현의 한계를 넘자 WebGL
[1A3]지금까지 상상한 표현의 한계를 넘자 WebGL
NAVER D2
쉽게 풀어보는 WebGL
쉽게 풀어보는 WebGL
Myung Woon Oh
Bs webgl소모임004
Bs webgl소모임004
Seonki Paik
피보나치 수열로 알아보는 몇가지 프로그래밍 개념
피보나치 수열로 알아보는 몇가지 프로그래밍 개념
Myung Woon Oh
ELD12: Badge Design
ELD12: Badge Design
halavais
개발자여! 스터디를 하자!
개발자여! 스터디를 하자!
changehee lee
The Power of WebGL - Hackeando sua GPU com JavaScript
The Power of WebGL - Hackeando sua GPU com JavaScript
Raphael Amorim
WebGL: GPU acceleration for the open web
WebGL: GPU acceleration for the open web
pjcozzi
[9xD] 개발자, 스터디로 성장하기
[9xD] 개발자, 스터디로 성장하기
한재 제
1인개밵Ӟ갶되기ѫѫ것들
1인개밵Ӟ갶되기ѫѫ것들
Jinsub Jung
WebGL: The Next Generation
WebGL: The Next Generation
Tony Parisi
WebGL의 무궁무진한 가능성
WebGL의 무궁무진한 가능성
Jun Ho Lee
[1A3]지금까지 상상한 표현의 한계를 넘자 WebGL
[1A3]지금까지 상상한 표현의 한계를 넘자 WebGL
NAVER D2
피보나치 수열로 알아보는 몇가지 프로그래밍 개념
피보나치 수열로 알아보는 몇가지 프로그래밍 개념
Myung Woon Oh
ELD12: Badge Design
ELD12: Badge Design
halavais
개발자여! 스터디를 하자!
개발자여! 스터디를 하자!
changehee lee
The Power of WebGL - Hackeando sua GPU com JavaScript
The Power of WebGL - Hackeando sua GPU com JavaScript
Raphael Amorim
WebGL: GPU acceleration for the open web
WebGL: GPU acceleration for the open web
pjcozzi
[9xD] 개발자, 스터디로 성장하기
[9xD] 개발자, 스터디로 성장하기
한재 제
1인개밵Ӟ갶되기ѫѫ것들
1인개밵Ӟ갶되기ѫѫ것들
Jinsub Jung
WebGL: The Next Generation
WebGL: The Next Generation
Tony Parisi
WebGL의 무궁무진한 가능성
WebGL의 무궁무진한 가능성
Jun Ho Lee
Ad

Similar to Bs webgl소모임001 uniform버전 (20)

Unity Surface Shader for Artist 01
Unity Surface Shader for Artist 01
SangYun Yi
Unity Surface Shader for Artist 02
Unity Surface Shader for Artist 02
SangYun Yi
이펙트 쉐이더 1강 - Shader 기초 개념
이펙트 쉐이더 1강 - Shader 기초 개념
Jihoo Oh
아일렛 온라인에서 사용한 블럭 렌더링 소개
아일렛 온라인에서 사용한 블럭 렌더링 소개
정만 김
SGL : 소프트웨어 3D 렌더링 엔진
SGL : 소프트웨어 3D 렌더링 엔진
SUNGCHEOL KIM
안드로이드스터디 7
안드로이드스터디 7
jangpd007
Unity 3d study #3
Unity 3d study #3
Hyunwoo Kim
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
Sukwoo Lee
Unity Surface Shader for Artist 03
Unity Surface Shader for Artist 03
SangYun Yi
Unity Surface Shader for Artist 04
Unity Surface Shader for Artist 04
SangYun Yi
웹 기반 하이퍼포먼스 그래픽 처리 - 문경두
웹 기반 하이퍼포먼스 그래픽 처리 - 문경두
jscamp_kr
[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기
changehee lee
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
zupet
Modern gpu optimize
Modern gpu optimize
ozlael ozlael
Modern gpu optimize blog
Modern gpu optimize blog
ozlael ozlael
07_Visual Shader Editor
07_Visual Shader Editor
noerror
[14.09.01] dynamic lighting in god of war3(shader study)
[14.09.01] dynamic lighting in god of war3(shader study)
Reflective Shadow Maps
Reflective Shadow Maps
Bongseok Cho
Unity Surface Shader for Artist 01
Unity Surface Shader for Artist 01
SangYun Yi
Unity Surface Shader for Artist 02
Unity Surface Shader for Artist 02
SangYun Yi
이펙트 쉐이더 1강 - Shader 기초 개념
이펙트 쉐이더 1강 - Shader 기초 개념
Jihoo Oh
아일렛 온라인에서 사용한 블럭 렌더링 소개
아일렛 온라인에서 사용한 블럭 렌더링 소개
정만 김
SGL : 소프트웨어 3D 렌더링 엔진
SGL : 소프트웨어 3D 렌더링 엔진
SUNGCHEOL KIM
안드로이드스터디 7
안드로이드스터디 7
jangpd007
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
Sukwoo Lee
Unity Surface Shader for Artist 03
Unity Surface Shader for Artist 03
SangYun Yi
Unity Surface Shader for Artist 04
Unity Surface Shader for Artist 04
SangYun Yi
웹 기반 하이퍼포먼스 그래픽 처리 - 문경두
웹 기반 하이퍼포먼스 그래픽 처리 - 문경두
jscamp_kr
[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기
changehee lee
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
zupet
07_Visual Shader Editor
07_Visual Shader Editor
noerror
[14.09.01] dynamic lighting in god of war3(shader study)
[14.09.01] dynamic lighting in god of war3(shader study)
Ad

Bs webgl소모임001 uniform버전

Editor's Notes

  • #4: 서로다른 세계…각각을 동작시키는 방법이 다름 GPU를 물리적으로 직접 코딩하기 어렵기 때문에.. webGL 라이브러리를 이용..
  • #5: 키값에 대해서도 설명해야겠군.. 웹지엘과 같은 그래픽스 처리에서는 1초당 최대 최대 60프레임을 그렸다 지웠다 반복하며 화면의 움직임을 표현함..
  • #6: GPU가 가장 잘 할 수 있는 일은 삼각형 그리는 기능
  • #7: 삼각형을 잘 조합해서 어떠한 형상을 그려내게됨 삼각형을 어떻게 그리는지가 문제임
  • #8: WebGL API의 역할은 javascript를 통해서 GPU에게 말할 수 있는 통역기 CPU에서 이용하던 데이터가 GPU로 가면서 이를 구분하기위한 용어들이 생겨남… 이제부터 그걸 알아봄…
  • #10: 기본 좌표계 설명 비율단위로 표현된다고 말해야겠군..
  • #11: 거기에 삼각형을 배열로 삼각형 정점 정보를 입력함
  • #16: 정점 정보를 연결해서 점3개를 지정했음.. 각점을 가상의 직선을 이용해서 GPU는 그릴 영역을 확정하게 되는데..
  • #17: 계산된 영역내의 색상을 어떻게 지정할껀가라는 문제가 있는데.. 이를 fragment Shader가 담당함…즉 2개의 쉐이더를 이용함…
  • #19: 쉐이더 소스란…. 지오메트리 결정할때 변환을 할수 있음! 근데 이소스가 GLSL이라 하여 C언어를 기초로한…상위레벨 언어임.. 근데 쉬움…
  • #20: 버텍스 쉐이더에서 가능한 일들 예시 프레그먼트 쉐이더에서 가능한 일들 예시.. 각 쉐이더를 조합해서 프로그램이 다양해 지면…..포토샵도 만듬..
  • #21: 버텍스 쉐이더에서 가능한 일들 예시 프레그먼트 쉐이더에서 가능한 일들 예시.. 각 쉐이더를 조합해서 프로그램이 다양해 지면…..포토샵도 만듬..
  • #22: 쉐이더만들었는데 뭔 프로그램? 쉐이더는 버텍스쉐이더와 프레그먼트 쉐이더가 반드시 쌍으로 돌아감.. 이를 묶어놓은것이 프로그램… 역시나 GPU에게 일일이 알려줘야함… 삼각형 하나 그리는데 드릅게 머가 마늠…