基础光线追踪(1) - 环境搭建

基础光线追踪(1) - 环境搭建

学习最基础的光线追踪,主要参考 Ray Tracing in One Weekend,不同的是我将使用更现代的 C++ 实现,并用 png 格式显示结果。

svpng

为了简便,使用 milo yip 的 svpng 编码 png,将其放入 3rdParty 文件夹下。

测试

编写 main.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include "../3rdParty/svpng/svpng.inc"
#include <cstdio>
#include <vector>

const int WIDTH = 640;
const int HEIGHT = 480;

using byte = unsigned char;

void paint(byte *d, int x, int y, byte r, byte g, byte b, byte a) {
d += 4 * (y * WIDTH + x);
d[0] = r;
d[1] = g;
d[2] = b;
d[3] = a;
}

int main() {
FILE *f = fopen("ch1.png", "wb");
std::vector<byte> rgba(4 * WIDTH * HEIGHT);
for (int y = 0; y < HEIGHT; y++)
for (int x = 0; x < WIDTH; x++)
paint(rgba.data(), x, y, x * 256 / WIDTH, y * 256 / HEIGHT, 128,
(x * 256 / WIDTH + y * 256 / HEIGHT) / 2);
svpng(f, WIDTH, HEIGHT, rgba.data(), 1);
fclose(f);
}

效果

Note1

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×