<aside> ⁉️ 궁금한 내용, 오타, 수정사항, 문의사항은 아래 깃허브 이슈 혹은 노션 블록 댓글로 달아주시면 바로 확인해드립니다! 도움이 되셨다면 아래 링크를 통해 🌟 한번 꾹 눌러주세요 ‼️

</aside>

GaepoMorningEagles/mini_raytracing_in_c


4. 구

우리는 3차원 공간에서 여러가지 object를 구현하는 것을 목적으로 한다. 여러가지 object 중 가장 구현하기 쉬운 구부터 구현하여 레이 트레이싱의 원리에 대해 조금 더 쉽게 접근 할 수 있도록 교재를 만들어 보았다.


4.1. 실습목표

구의 구조체 만들기.구의 생성자 만들기.hit_sphere함수 만들기ray_color 수정.


4.2. 구의 구조체 만들기.

구에 대한 데이터를 저장할 구조체를 만들어준다. 구를 만들 때 필요한 것은 무엇일까? 아주 간단하다. 중심의 위치와 반지름의 길이만 알면 된다. 반지름의 제곱 값도 자주 쓰이니 반지름의 제곱도 구조체의 멤버로 추가해주자.

    ...

    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]

구의 구조체를 추가하고 후에 필요할 식별자 매크로를 추가해주었다. 다음은 구에 관한 정보들을 가지고 구를 만들 생성자 함수를 작성해보자.


4.3. 구의 생성자 만들기.

다음은 구의 정보들을 가지고 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]