miniRT 실습 - 02. Vector

jkeum·2021년 1월 24일
0

miniRT

목록 보기
2/7

출처:
Ray Tracing in One Weekend - The vec3 Class
Github - GaepoMorningEagles/mini_raytracing_in_c


Vector


Descriptions

거의 모든 그래픽 프로그램에는 기하학적 벡터와 색상을 저장하기 위한 클래스(여기서는 구조체)가 있다. 여기서는 색상, 위치, 방향, 오프셋 등에 대해 동일한 구조체 vec3를 사용한다. 의도와 사용을 명확히 하기 위해서, vec3에 대해 두 가지 별칭인 point3color3를 선언한다. point3는 세 점의 좌표를 가지는 구조체 변수이고, color3는 RGB 값을 저장하는 구조체 변수이다.


color print

color3을 인자로 받아서 [0,1][0,1]로 되어있는 RGB값을 각각 [0,255][0,255]로 맵핑하여 출력한다.


structure

vec3 구조체를 만들어서 doublex, y, z 값을 저장하고 이를 point3color3로도 사용할 수 있게 한다. vec3에서는 3차원 벡터의 방향을 나타내고, point3에서는 3차원 상의 한 점을 나타내며, color3에서는 R, G, B 값을 나타낸다.


util functions

벡터 연산에 사용할 함수들을 작성했다. vec3, point3 그리고 color3의 생성자 함수를 작성하고, 벡터의 길이, 벡터의 연산(합/차/곱/나눗셈), 내적과 외적 그리고 단위벡터를 구하는 함수를 작성했다.


main

이전에는 doubler, g, b 변수를 선언해서 그 값을 직접 출력했지만, 이번에는 구조체 변수와 색을 출력하는 함수를 이용했다. color3형 변수 pixel_color를 선언해서 그 구조체 변수의 각 x, y, z 변수에 값을 넣어주었다. 그리고 이 구조체 변수를 write_color() 함수의 인자로 넣어서 거기서 색을 출력하게 했다.


Result Image

ppm image file

profile
It's me, jkeum!

0개의 댓글