<aside> ⁉️ 궁금한 내용, 오타, 수정사항, 문의사항은 아래 깃허브 이슈 혹은 노션 블록 댓글로 달아주시면 바로 확인해드립니다! 도움이 되셨다면 아래 링크를 통해 🌟 한번 꾹 눌러주세요 ‼️
</aside>
GaepoMorningEagles/mini_raytracing_in_c
우리는 3차원 공간을 구현할 때에 점의 위치, 방향을 수학적으로 계산하기 위해 벡터를 사용할 것이다. 벡터를 이용하면 여러가지 도형, 빛의 위치, 방향을 쉽게 다룰 수 있다. 따라서 벡터의 개념을 잘 이해하지 못했다면 벡터에 대해 간단하게 공부를 하고 오기 바란다. 벡터 공부
write_color함수 만들기.3차원 벡터 구조체 만들기.3차원 벡터 유틸리티 함수 만들기.우리가 만들 레이 트레이서 프로그램은 3차원 유클리드 좌표계(익히 알고 있는 x, y, z 3축으로 된 좌표계)를 사용할 것이다..이번 단원에서는 우리가 생성하게 될 카메라, 광선, 구체 등의 점, 벡터, 색상 정보를 저장하기 위한 3차원 벡터 구조체를 만들고 벡터 연산을 위한 유틸리티 함수 세트를 만들 것이다.
#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값을 출력하는 부분을 제거해줬다.