본문 바로가기

전체 글7

06. Shapes Shapes 지금까지 GLSL 기초와 타입, 함수들을 배웠다. 이번에는 간단한 도형을 병렬 절차로 그리는 방법을 알아보자. Rectangle 격자무늬 종이를 가지고 정사각형을 그린다고 생각해보자. 종이의 크기는 10x10이고 정사각형은 8x8로 그린다고 할 때 어떻게 그릴 것인가? 일반적으로 첫 번째 행과 마지막 행, 첫 번째 열과 마지막 열을 제외한 모든 것을 칠할 것이다. 이게 셰이더랑 무슨 상관이 있는가? 격자무늬 종이의 각 작은 사각형은 스레드(픽셀)이다. 각각의 작은 정사각형은 체스판의 좌표처럼 그 위치를 알고 있다. 이전 챕터에서는 x와 y를 각각 R, G채널로 매핑하고 0.0과 1.0 사이의 좁은 2차원 영역을 사용하는 방법을 배웠다. 이걸 어떻게 이용해서 화면 중앙에 정사각형을 그릴 수 있.. 2022. 1. 2.
Headache source 2021. 12. 31.
05. Colors Colors GLSL vector 타입에 대해 제대로 아는 것이 중요하다. OOP에 익숙하다면 C처럼 vector 내부의 데이터에 접근할 수 있다는 것을 알 수 있을 것이다. vec3 red = vec3(1.0, 0.0, 0.0); red.x = 1.0; red.y = 0.0; red.z = 0.0; x, y, z 표기법을 이용해 색을 정의하는 것은 혼란스럽고 오해의 소지가 있을 수 있다. 따라서 이 정보에 다른 이름으로 접근할 수 있는 다른 방법이 존재한다. .x, .y, .z의 값은 .r, .g, .b 로 쓸 수 있으며 .s, .t, .p로도 표현 가능하다(보통 텍스쳐의 공간 좌표에 사용된다) 인덱스 위치 [0], [1], [2]를 사용하여 vector의 데이터에 접근할 수도 있다. 다음 코드는 동일.. 2021. 12. 31.
04. Shaping functions Algorithmic drawing Shaping functions 이번 장에서는 모양을 그릴 때 유용한 함수들을 소개한다. 먼저 예제 코드부터 살펴보자. #ifdef GL_ES precision mediump float; #endif uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; // Plot a line on Y using a value between 0.0-1.0 float plot(vec2 st) { return smoothstep(0.02, 0.0, abs(st.y - st.x)); } void main() { vec2 st = gl_FragCoord.xy/u_resolution; float y = st.x; vec.. 2021. 12. 30.
03. Uniforms, gl_FragCoord Uniforms 지금까지 GPU가 많은 수의 병렬 스레드를 관리하는 방법을 살펴보았다. 각 스레드는 전체 이미지의 일부에 색상을 할당하는 역할을 한다. 각 병렬 스레드는 다른 스레드가 무얼 하고 있는지 알 수 없다(blind). 하지만 CPU에서 모든 스레드로 입력값을 전송할 수는 있다. 그래픽카드의 아키텍처 상 이러한 입력은 모든 스레드들에 동일하게 들어가며, 읽기 전용으로 설정된다. 각 스레드는 읽을 수는 있으나 변경할 수 없는 동일한 데이터를 수신한다. 이러한 입력을 uniform이라고 하며 다음과 같은 타입에 대해 대부분 지원한다. float, vec2, vec3, vec4, mat2, mat3, mat4, sampler2D, samplerCube uniform은 보통 디폴트 부동소수점 정밀도를 .. 2021. 12. 30.
02. Hello world! Hello World 일반적으로 "Hello world!" 예제는 새로운 언어를 배울 때의 첫걸음이다. GPU로 텍스트를 렌더링하는 것은 초심자에겐 매우 복잡한 작업이라 대신 색상을 출력하는 것으로 한다. GLSL(openGL Shading Language)를 통해 프로그램을 작성할 것이며 OpenGL의 역사는 openglbook.com/chapter-0-preface-what-is-opengl.html를 참고해보면 좋다. (GLSL의 컨벤션이 왜 이렇게 되었는지 알 수 있다) 에디터는 http://editor.thebookofshaders.com/ 를 기준으로 한다. #ifdef GL_ES precision mediump float; #endif uniform float u_time; void main.. 2021. 12. 29.