Ray Tracing in One Weekend Book Series-source code:
https://github.com/RayTracing/raytracing.github.io/
Ray Tracing in One Weekend-원문:
https://raytracing.github.io/books/RayTracingInOneWeekend.html#outputanimage
Ray Tracing in One Weekend을 공부하면서 어려웠던 부분들을 보충하는 글을 써보려한다. Ray Tracing in One Weekend의 2ch부터 시작한다.
앞으로 나올 예제들은 모두 ppm(https://en.wikipedia.org/wiki/Netpbm#PPM_example) 형식으로 출력한다. 예제들의 결과물 생성방식이 아래의 예제를 따르므로 잘 이해하도록하자.
#include <iostream>
int main() {
// Image
const int image_width = 256;
const int image_height = 256;
// Render
std::cout << "P3\n" << image_width << ' ' << image_height << "\n255\n";
for (int j = image_height-1; j >= 0; --j) {
std::cerr << "\rScanlines remaining: " << j << ' ' << std::flush;
// 출력해야할 남은 줄 수
for (int i = 0; i < image_width; ++i) {
auto r = double(i) / (image_width-1);
auto g = double(j) / (image_height-1);
auto b = 0.25;
int ir = static_cast<int>(255.999 * r);
int ig = static_cast<int>(255.999 * g);
int ib = static_cast<int>(255.999 * b);
std::cout << ir << ' ' << ig << ' ' << ib << '\n';
}
}
}
build\Release\inOneWeekend.exe > image.ppm
아래의 이미지처럼 출력된다.