본문 바로가기

전체 글481

[C++] 챕터 6 - 연산자 : 정보를 가공하는 법 // 6-1 : 사칙연산 int 타입의 +, -, *, /, %에 대해 알아본다. 연산자의 대상이 되는 애들을 피연산자라고 한다. // 6-2 : 대입 연산자 int main() { int a, b, c; a = b = c = 100; return 0; } /* c = 100이 제일 먼저 실행된다. a,b,c 모두 100이 된다. */ // 6-3 : 관계 연산자 #include using namespace std; int main() { int a = 3; int b = 5; bool b1, b2, b3, b4, b5, b6; b1 = a > b; b2 = a >= b; // ... 생략 b6 = a != b; cout 2023. 4. 21.
[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.