More Related Content What's hot (20) PDF
Clean Front-End Development
지수 윤
PPTX
[하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발
정석 양
PPTX
Nodejs, PhantomJS, casperJs, YSlow, expressjs
기동 이
PPTX
Geo server 성능향상을 위한 튜닝 기법 20111028
BJ Jang
PPTX
[115] clean fe development_윤지수
NAVER D2
PDF
React native 개발 및 javascript 기본
Tj .
PDF
GraphQL overview #2
기동 이
PDF
[131]chromium binging 기술을 node.js에 적용해보자
NAVER D2
PDF
Secrets of the JavaScript Ninja - Chapter 12. DOM modification
Hyuncheol Jeon
Viewers also liked (12) PDF
[1A3]지금까지 상상한 표현의 한계를 넘자 WebGL
NAVER D2
PDF
The Power of WebGL - Hackeando sua GPU com JavaScript
Raphael Amorim
PPT
WebGL: GPU acceleration for the open web
pjcozzi
PPTX
[9xD] 개발자, 스터디로 성장하기
한재 제
Similar to Bs webgl소모임001 uniform버전 (20)
PPTX
아일렛 온라인에서 사용한 블럭 렌더링 소개
정만 김
PDF
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
Sukwoo Lee
PPTX
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
zupet
PPTX
[14.09.01] dynamic lighting in god of war3(shader study)
강
Bs webgl소모임001 uniform버전3. WEBGL
WebGL 프로그래밍을 한다는 것은?
javascript로 만들어진 데이터를 기반으로
javscript형식의 webGL API를 통해 GPU를 동작시키는것
javascript GLSL
4. 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)
12. 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 오브젝트에 추가정보입력
18. HOW TO..
var firstShader = gl.createShader(gl.VERTEX_SHADER)
gl.shaderSource(firstShader, 쉐이더소스)
gl.compileShader(firstShader)
컴파일을 왜 해?
GPU입장에서 넘어온 데이터는 단순 문자열!
이게 프로그램이니 컴파일을 해두라고 명령… 쉐이더
19. HOW TO..
var vertexShaderStr = ""+
"attribute vec3 aVertexPosition;" +
"void main(void) {" +
" gl_Position = vec4(aVertexPosition, 1.0);" +
"}“
버텍스 쉐이더의 최종 목적 : gl_Position
21. 프로그램(program)
var firstProgram = gl.createProgram()
gl.attachShader(firstProgram , vertexShader)
gl.attachShader(firstProgram, fragmentShader)
gl.linkProgram(firstProgram)
firstProgram.aVertexPosition =
gl.getAttribLocation(firstProgram, "aVertexPosition");
27. 유니폼(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");
28. 유니폼(uniform) Draw가 진행되는 동안 상수처럼 유지되는 변수
"void main(void) {" +
" gl_Position = " +
" positionMTX(uPosition) * " +
" rotationMTX(uRotation) * " +
" vec4(aVertexPosition, 1.0);" +
"}"
29. 유니폼(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);
}
30. 유니폼(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);
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에게 일일이 알려줘야함…
삼각형 하나 그리는데 드릅게 머가 마늠…