출처:
Ray Tracing in One Weekend - The vec3 Class
Github - GaepoMorningEagles/mini_raytracing_in_c
거의 모든 그래픽 프로그램에는 기하학적 벡터와 색상을 저장하기 위한 클래스(여기서는 구조체)가 있다. 여기서는 색상, 위치, 방향, 오프셋 등에 대해 동일한 구조체 vec3
를 사용한다. 의도와 사용을 명확히 하기 위해서, vec3
에 대해 두 가지 별칭인 point3
와 color3
를 선언한다. point3
는 세 점의 좌표를 가지는 구조체 변수이고, color3
는 RGB 값을 저장하는 구조체 변수이다.
color3
을 인자로 받아서 로 되어있는 RGB값을 각각 로 맵핑하여 출력한다.
vec3
구조체를 만들어서 double
형 x
, y
, z
값을 저장하고 이를 point3
와 color3
로도 사용할 수 있게 한다. vec3
에서는 3차원 벡터의 방향을 나타내고, point3
에서는 3차원 상의 한 점을 나타내며, color3
에서는 R, G, B 값을 나타낸다.
벡터 연산에 사용할 함수들을 작성했다. vec3
, point3
그리고 color3
의 생성자 함수를 작성하고, 벡터의 길이, 벡터의 연산(합/차/곱/나눗셈), 내적과 외적 그리고 단위벡터를 구하는 함수를 작성했다.
이전에는 double
형 r
, g
, b
변수를 선언해서 그 값을 직접 출력했지만, 이번에는 구조체 변수와 색을 출력하는 함수를 이용했다. color3
형 변수 pixel_color
를 선언해서 그 구조체 변수의 각 x
, y
, z
변수에 값을 넣어주었다. 그리고 이 구조체 변수를 write_color()
함수의 인자로 넣어서 거기서 색을 출력하게 했다.