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

</aside>

GaepoMorningEagles/mini_raytracing_in_c


2. 벡터

우리는 3차원 공간을 구현할 때에 점의 위치, 방향을 수학적으로 계산하기 위해 벡터를 사용할 것이다. 벡터를 이용하면 여러가지 도형, 빛의 위치, 방향을 쉽게 다룰 수 있다. 따라서 벡터의 개념을 잘 이해하지 못했다면 벡터에 대해 간단하게 공부를 하고 오기 바란다. 벡터 공부


2.1. 실습목표

write_color함수 만들기.3차원 벡터 구조체 만들기.3차원 벡터 유틸리티 함수 만들기.우리가 만들 레이 트레이서 프로그램은 3차원 유클리드 좌표계(익히 알고 있는 x, y, z 3축으로 된 좌표계)를 사용할 것이다..이번 단원에서는 우리가 생성하게 될 카메라, 광선, 구체 등의 점, 벡터, 색상 정보를 저장하기 위한 3차원 벡터 구조체를 만들고 벡터 연산을 위한 유틸리티 함수 세트를 만들 것이다.


2.2. write_color 만들고 적용시키기.

#ifndef PRINT_H
# define PRINT_H

# include "stdio.h"
# include "structures.h"void	write_color(t_color3 pixel_color);

#endif

Code1 : [/include/print.h]

ppm에 color를 출력하는 함수를 넣어줬다.

#include "print.h"// [0,1] 로 되어있는 rgb 값을 각각 [0,255]에 맵핑 해서 출력.

void	write_color(t_color3 pixel_color)
{
	printf("%d %d %d\\n", (int)(255.999 * pixel_color.x),
						(int)(255.999 * pixel_color.y),
						(int)(255.999 * pixel_color.z));
}

Code2 : [/src/print/print.c]

rgb값을 출력하는 함수.

#include <stdio.h>// 추가
#include "structures.h"
#include "utils.h"
#include "print.h"// 추가 끝

int	main(void)
{
	// 제거
	int		i;
	int		j;
	double	r;
	double	g;
	double	b;
	int		canvas_width;
	int		canvas_height;
	// 제거 끝
	// 추가
	int			i;
	int			j;
	t_color3	pixel_color;
	int			canvas_width;
	int			canvas_height;
	// 추가 끝
	//캔버스의 가로, 세로 픽셀값
	canvas_width = 256;

	...

	i = 0;
		while (i < canvas_width)
		{
			// 제거
			r = (double)i / (canvas_width - 1);
			g = (double)j / (canvas_height - 1);
			b = 0.25;
			printf("%d %d %d\\n", (int)(255.999 * r), (int)(255.999 * g), (int)(255.999 * b));
			// 제거 끝
			// 추가
			pixel_color.x = (double)i / (canvas_width - 1);
			pixel_color.y = (double)j / (canvas_height - 1);
			pixel_color.z = 0.25;
			write_color(pixel_color);
			// 추가 끝
		++i;
		}
	--j;

Code3 : [/src/main.c]

rgb값을 출력하는 함수를 아래에 write_color함수로 따로 만들었기 때문에 변수 rgb값을 출력하는 부분을 제거해줬다.