본문 바로가기

전체 글525

[GLSL] 9 - Patterns 정규화된 좌표계를 3으로 늘린다. 여기에 fract 함수를 적용한다. 0-1값에서 생성된 실수값, 1-2 값에서 생성된 실수값, 2-3 값에서 생성된 실수값. 3x3 셀을 얻을 수 있다. float circle(in vec2 _st, in float _radius){ vec2 l = _st-vec2(0.5); return 1.-smoothstep(_radius-(_radius*0.01), _radius+(_radius*0.01), dot(l,l)*4.0); } void main() { vec2 st = gl_FragCoord.xy/u_resolution; vec3 color = vec3(0.0); st *= 3.0; // Scale up the space by 3 st = fract(st); // Wra.. 2023. 4. 20.
[GLSL] 8 - 2D Matrices Translate 도형을 이동하는 방법은 좌표계 자체를 이동하는 것이다. st 변수에 각 도형의 위치 벡터를 더한다. 이러면 전체 공간 좌표계가 움직인다. 코드 예제를 보자. float box(in vec2 _st, in vec2 _size){ _size = vec2(0.5) - _size*0.5; vec2 uv = smoothstep(_size, _size+vec2(0.001), _st); uv *= smoothstep(_size, _size+vec2(0.001), vec2(1.0)-_st); return uv.x*uv.y; } float cross(in vec2 _st, float _size){ return box(_st, vec2(_size,_size/4.)) + box(_st, vec2(_size.. 2023. 4. 20.
[C++] 챕터 5 - 타입 1 : 정보의 종류 // 예제 5-1 : 6가지 정수 타입의 범위 실험 int main() { short int si; unsigned short int usi; int i; unsigned int ui; long int li; unsigned long ul; // int가 없음에 주의 // 작은 값 si = 40000; // error usi = 40000; // 이하 ok i = 40000; ui = 40000; li = 40000; ul = 40000; // 조금 더 큰 값 si = 70000; // error usi = 70000; // error i = 70000; // 이하 ok ui = 70000; li = 70000; ul = 70000; // 더 큰 값 si = 2200000000; // 이하 error u.. 2023. 4. 20.
[C++] 챕터 4 - 변수 : 정보를 담는 방법 // 예제 4-1 : 변수의 정의와 사용 # include using namespace std; int main() { // 변수 정의 int a; int b; int c; // 각 변수에 값 넣기 a = 100; b = 200; c = 300; // 화면에 출력 cout 2023. 4. 20.
[GLSL] 7 - Shapes 간단한 도형을 병렬적인 절차에 따라 그리는 방법을 배운다. Rectangle 정사각형을 그리기 if 문 사용 if ( (X GREATER THAN 1) AND (Y GREATER THAN 1) ) paint white else paint black if 문을 step()으로 변경 uniform vec2 u_resolution; void main(){ vec2 st = gl_FragCoord.xy/u_resolution.xy; vec3 color = vec3(0.0); float left = step(0.1,st.x); float bottom = step(0.1,st.y); color = vec3( left * bottom ); gl_FragColor = vec4(color,1.0); } 코드를 줄여보자... 2023. 4. 19.
[GLSL] 6 - Colors 벡터 내부의 데이터에 C언어의 구조체처럼 접근한다. vec3 red = vec3(1.0,0.0,0.0); red.x = 1.0; red.y = 0.0; red.z = 0.0; 색상을 x, y, z 표기법으로 정의하면 혼란스러울 수 있다. 그래서 다른 접근법도 있다. s,t,p는 일반적으로 텍스처의 공간 좌표에 사용된다. vector[0] = vector.r = vector.x = vector.s; vector[1] = vector.g = vector.y = vector.t; vector[2] = vector.b = vector.z = vector.p; vector[3] = vector.a = vector.w = vector.q; GLSL 벡터의 또 다른 특징은 프로퍼티를 원하는 순서대로 결합할 수 있다... 2023. 4. 18.
[GLSL] 5 - Shaping functions // 개요 1차원 함수를 만드는 방법을 알아본다. 이를 알아야 기초가 튼튼해진다. 데이터를 검은색에서 흰색으로의 그라데이션으로 시각화한다. 또한 녹색 선도 그려서 시각화한다. plot 함수 기능에 의문 가지지 말아야한다. 나중에 알아볼 것이다. // 직선 #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() { vec.. 2023. 4. 17.
[GLSL] 4 - Running your shader (세부내용 생략) https://thebookofshaders.com/04/ The Book of Shaders Gentle step-by-step guide through the abstract and complex universe of Fragment Shaders. thebookofshaders.com - 저자가 만든 GLSL 쉐이더 에디터에 대한 설명 한다. - 블렌더에서의 사용법에 대해서도 설명한다. 쉐이더 관련 내용은 아니라 자세한 요약은 스킵하였다. 2023. 4. 17.
[GLSL] 3 - Uniforms, gl_FragCoord uniform // uniform이란 Thread들은 서로에 대해 데이터를 공유할수 없더라도, CPU에서 인풋을 받을수 있다. 이 인풋들은 모든 Thread들에 있어서 일정(uniform)하고 read only이다. 즉, 읽을순 있어도 변경할 수 없다. 이런 인풋들을 uniform이라고 한다. float, vec2, vec3, vec4, mat2, mat3, mat4, sampler2D, samplerCube 등의 데이터 타입을 지원한다. 유니폼 값들은 보통 floating pont precision설정이 끝난 후 선언된다. // uniform 선언 위치 #ifdef GL_ES precision mediump float; #endif uniform vec2 u_resolution; // Canvas si.. 2023. 4. 14.