<aside> ⁉️ 궁금한 내용, 오타, 수정사항, 문의사항은 아래 깃허브 이슈 혹은 노션 블록 댓글로 달아주시면 바로 확인해드립니다! 도움이 되셨다면 아래 링크를 통해 🌟 한번 꾹 눌러주세요 ‼️
</aside>
GaepoMorningEagles/mini_raytracing_in_c
우리는 3차원 공간에서 여러가지 object를 구현하는 것을 목적으로 한다. 여러가지 object 중 가장 구현하기 쉬운 구부터 구현하여 레이 트레이싱의 원리에 대해 조금 더 쉽게 접근 할 수 있도록 교재를 만들어 보았다.
구의 구조체 만들기.구의 생성자 만들기.hit_sphere함수 만들기ray_color 수정.
구에 대한 데이터를 저장할 구조체를 만들어준다. 구를 만들 때 필요한 것은 무엇일까? 아주 간단하다. 중심의 위치와 반지름의 길이만 알면 된다. 반지름의 제곱 값도 자주 쓰이니 반지름의 제곱도 구조체의 멤버로 추가해주자.
...
typedef struct s_camera t_camera;
typedef struct s_canvas t_canvas;
// 추가
// 3. 오브젝트 구조체
typedef struct s_sphere t_sphere;
// 4. 식별자 매크로
typedef int t_bool;
# define FALSE 0
# define TRUE 1
// 추가 끝
...
// 추가
// 오브젝트 구조체
struct s_sphere
{
t_point3 center;
double radius;
double radius2;
};
// 추가 끝
#endif
Code1 : [miniRT/include/structures.h]
구의 구조체를 추가하고 후에 필요할 식별자 매크로를 추가해주었다. 다음은 구에 관한 정보들을 가지고 구를 만들 생성자 함수를 작성해보자.
다음은 구의 정보들을 가지고 3차원 공간에 구를 만들어줄 생성자 함수를 만들어보자.
#include "structures.h"
t_sphere sphere(t_point3 center, double radius)
{
t_sphere sp;
sp.center = center;
sp.radius = radius;
sp.radius2 = radius * radius;
return (sp);
}
Code2 : [miniRT/src/scene/object_create.c]