SlideShare 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)
쉐이더(Shader)
프로그램(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버전
쉐이더(Shader)
쉐이더(Shader)
Geometry
Vertex Shader
쉐이더(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/

More Related Content

PPTX
Bs webgl소모임002
PDF
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
PDF
WebGL 20150406
PPTX
What is the meteor?
PPTX
6장 performance of game_최준혁_2
PDF
Node.js 현재와 미래
PPTX
Node.js and react
PDF
제 5회 Lisp 세미나 - 클로저 개발팀을 위한 지속적인 통합
Bs webgl소모임002
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
WebGL 20150406
What is the meteor?
6장 performance of game_최준혁_2
Node.js 현재와 미래
Node.js and react
제 5회 Lisp 세미나 - 클로저 개발팀을 위한 지속적인 통합

What's hot (20)

PDF
Clean Front-End Development
PPTX
개발자의 컴퓨터
PDF
Vuejs 시작하기
PPTX
[하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발
PDF
Node.js at OKJSP
PPTX
Nodejs, PhantomJS, casperJs, YSlow, expressjs
PPTX
Node.js
PDF
Resource Handling in Spring MVC
PPTX
Geo server 성능향상을 위한 튜닝 기법 20111028
PPTX
Nest js 101
PPTX
[115] clean fe development_윤지수
PDF
React native 개발 및 javascript 기본
PDF
ReactJS로 시작하는 멀티플랫폼 개발하기
PPTX
파이썬 언어 기초
PDF
GraphQL overview #2
PPTX
Leadweb Nodejs
PDF
[131]chromium binging 기술을 node.js에 적용해보자
PPTX
GraphQL overview
PDF
Secrets of the JavaScript Ninja - Chapter 12. DOM modification
PPT
웃으면서Python
Clean Front-End Development
개발자의 컴퓨터
Vuejs 시작하기
[하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발
Node.js at OKJSP
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Node.js
Resource Handling in Spring MVC
Geo server 성능향상을 위한 튜닝 기법 20111028
Nest js 101
[115] clean fe development_윤지수
React native 개발 및 javascript 기본
ReactJS로 시작하는 멀티플랫폼 개발하기
파이썬 언어 기초
GraphQL overview #2
Leadweb Nodejs
[131]chromium binging 기술을 node.js에 적용해보자
GraphQL overview
Secrets of the JavaScript Ninja - Chapter 12. DOM modification
웃으면서Python
Ad

Viewers also liked (12)

PDF
[1A3]지금까지 상상한 표현의 한계를 넘자 WebGL
PDF
쉽게 풀어보는 WebGL
PPTX
Bs webgl소모임004
PPTX
피보나치 수열로 알아보는 몇가지 프로그래밍 개념
PPT
ELD12: Badge Design
PPTX
개발자여! 스터디를 하자!
PDF
The Power of WebGL - Hackeando sua GPU com JavaScript
PPT
WebGL: GPU acceleration for the open web
PPTX
[9xD] 개발자, 스터디로 성장하기
PPTX
1인개발자가되기전알아야할것들
PPTX
WebGL: The Next Generation
PDF
WebGL의 무궁무진한 가능성
[1A3]지금까지 상상한 표현의 한계를 넘자 WebGL
쉽게 풀어보는 WebGL
Bs webgl소모임004
피보나치 수열로 알아보는 몇가지 프로그래밍 개념
ELD12: Badge Design
개발자여! 스터디를 하자!
The Power of WebGL - Hackeando sua GPU com JavaScript
WebGL: GPU acceleration for the open web
[9xD] 개발자, 스터디로 성장하기
1인개발자가되기전알아야할것들
WebGL: The Next Generation
WebGL의 무궁무진한 가능성
Ad

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

PDF
웹개발자가 알아야할 기술
PDF
20131217 html5
PPTX
Surface flingerservice(서피스플링거서비스초기화 ics)
PDF
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
PPTX
Domain Specific Languages With Groovy
PPTX
Python qgis advanced
PDF
Javascript 조금 더 잘 알기
PPTX
[FOSS4G Korea 2016] Workshop - Advanced GeoServer
PPTX
DEVIEW-FULL-감독판.pptx
PDF
Modern android
PDF
c++ opencv tutorial
PDF
Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)
PDF
정적 컨텐츠 제너레이터 GatsbyJS에 대해서 알아봅시다.
PDF
Isomorphicspring Isomorphic - spring web seminar 2015
PDF
Flash Player 11과 AIR 3 환경에서 3D 개발
PPTX
go-qml
PPT
D2 Havok
PDF
7가지 동시성 모델 - 데이터 병렬성
PDF
[FOSS4G Korea 2021]Workshop-QGIS-TIPS-20211028
PDF
7가지 동시성 모델 람다아키텍처
웹개발자가 알아야할 기술
20131217 html5
Surface flingerservice(서피스플링거서비스초기화 ics)
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
Domain Specific Languages With Groovy
Python qgis advanced
Javascript 조금 더 잘 알기
[FOSS4G Korea 2016] Workshop - Advanced GeoServer
DEVIEW-FULL-감독판.pptx
Modern android
c++ opencv tutorial
Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)
정적 컨텐츠 제너레이터 GatsbyJS에 대해서 알아봅시다.
Isomorphicspring Isomorphic - spring web seminar 2015
Flash Player 11과 AIR 3 환경에서 3D 개발
go-qml
D2 Havok
7가지 동시성 모델 - 데이터 병렬성
[FOSS4G Korea 2021]Workshop-QGIS-TIPS-20211028
7가지 동시성 모델 람다아키텍처

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에게 일일이 알려줘야함… 삼각형 하나 그리는데 드릅게 머가 마늠…