출처: Ray Tracing in One Weekend - A List of Hittable Objects Github - GaepoMorningEagles/miniraytracingin_c Hittable Objects A List of Hittable Objects 광선과 hit 할 수 있는 객체들, 과제에서 구현해야 하는 객체들을 hittable objects라고 하겠다. 이 객체들을 담고 있는 연결리스트를 world라고 했다. oadd()를 통해 world 리스트에 추가된 순서대로 광선과의 _hi
출처: Ray Tracing in One Weekend - Shading with Surface Normals Github - GaepoMorningEagles/miniraytracingin_c Normals and Hittable Simplifying the Ray-Sphere Intersection Code 이전에 작성한 코드에서 광선과 구의 교점을 구하는 방정식의 b가 인수로 2를 가지고 있으므로 짝수 근의 공식을 사용할 수 있다. 연산을 줄이기 위해 짝수 근의 공식을 사용하여 b를 half_b로 바꿔서 계산했다. An Abstrac
출처: Ray Tracing in One Weekend - Shading with Surface Normals Github - GaepoMorningEagles/miniraytracingin_c Shading with Surface Normals Descriptions 먼저 음영처리를 할 수 있도록 표면 법선을 만들어 보겠다. 이 법선은 광선과 구의 교차점에서 표면에 수직인 벡터이다. 법선에 대해 두 가지 설계를 할 수 있다. 첫 번째는 법선을 단위벡터로 설정할 것인지를 결정해야 한다. 음영 처리에 편리하지만 미묘한 버그가 생길 수 있는데, 개인적 선호도에 따르면
출처: Ray Tracing in One Weekend - Adding a Sphere Github - GaepoMorningEagles/miniraytracingin_c Sphere Description 레이트레이서에 단일 객체를 추가해 보겠다. 광선이 구와 만나는지를 계산하는 것은 비교적 간단하기 때문에 먼저 구를 나타내는 실습을 하겠다. Ray-Sphere Intersection 반지름이 $$r$$ 이고 점 $$\bold{C}(Cx, Cy, Cz)$$를 중심으로 하는 구의 방정식은 $$(x - Cx)^2 + (y - Cy)^2 + (z - Cz)^2 = r^2$$
출처: Ray Tracing in One Weekend - Rays, a Simple Camera, and Background Github - GaepoMorningEagles/miniraytracingin_c Camera and Canvas The Ray Structure 모든 광선추적기(ray tracers)에는 광선 구조체와 광선을 따라 보이는 색상에 대한 계산이 존재한다. 광선을 함수 $$\bold{P}(t) = \bold{A} + t\bold{b}$$ 로 생각해 보겠다. 여기서 $$\bold P$$는 3차원 광선 위에 존재하는 3차원 좌표(점)이다. $$\
출처: Ray Tracing in One Weekend - The vec3 Class Github - GaepoMorningEagles/miniraytracingin_c Vector Descriptions 거의 모든 그래픽 프로그램에는 기하학적 벡터와 색상을 저장하기 위한 클래스(여기서는 구조체)가 있다. 여기서는 색상, 위치, 방향, 오프셋 등에 대해 동일한 구조체 vec3를 사용한다. 의도와 사용을 명확히 하기 위해서, vec3에 대해 두 가지 별칭인 point3와 color3를 선언한다. point3는 세 점의 좌표를 가지는 구조체 변수이고, color3는 RGB 값을 저장