🎁 minirt 뽀개기!

(0) minirt 시작하기!

(1) mlx 활용과 color 표현 하는 방법!

(2) 벡터에 대한 이해!

(3) 벡터의 연산!

(5) Raytracing One Weekend 식 이해하기! 2

(6) Raytracing One Weekend 식 이해하기! 3

(7) Raytracing One Weekend 식 이해하기! 4

(8) Raytracing One Weekend 식 이해하기! 5

Raytracing in one weekend 식 이해하기!


Raytracing in one weekend 문서를 보다보면 코드는 알겠는데 대체 이 코드가 무엇을 의미하는지 이해하기 어려울 때가 많다.. 대부분 수학식을 코드로 변경한건데 이전 벡터에 대한 지식이 없으면 이 코드들의 역할도 이해하기 어렵다!

아직 벡터에 대해 조금 어려운 부분이 있다면 한번 더 복습하고 아래 내용을 참고하길 바란다! 이제 한줄 한줄 Raytracing in one weekend(이하 ROW)의 식을 이해해보자!

The vec3 Class


ROW 문서의 3장인 vec3 Class 에서는 이후 우리가 사용할 벡터들과 해당 벡터들을 연사하는데 필요한 함수들에대해 나와있다. 한 줄 한 줄 해당 함수가 어떤 역할을 하는지 알아보자!

C++ 문법에 익숙하지 않다면 minirt를 위한 C++ 문법 간단 정리! 페이지를 참고하길 바란다!! 해당 문서를 읽고 온것으로 간주하고 아래 내용을 진행하겠다!

class vec3 {
    public:
        vec3() : e{0,0,0} {}
        vec3(double e0, double e1, double e2) : e{e0, e1, e2} {}

        double x() const { return e[0]; }
        double y() const { return e[1]; }
        double z() const { return e[2]; }

        vec3 operator-() const { return vec3(-e[0], -e[1], -e[2]); }
        double operator[](int i) const { return e[i]; }
        double& operator[](int i) { return e[i]; }
				...

		public:
        double e[3];

1) 벡터의 성분

vec3 클래스는 x, y, z 성분을 가진다. 책에서는 double[3] 배열을 선언해서 사용하고 있다. 이 성분들은 한 벡터를 각 축 위의 성분들로 분해한 값들을 가지고 있는 것이다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c5aa1272-99bb-4488-be01-669e699945bc/Untitled.png

즉, A 벡터는 vec3(x, y, z)로 표현할 수 있다.