这一章唯一值得一提的就是这个图像处理库了,单头文件,功能强大,仓库地址: https://github.com/nothings/stb
里面不但有用于读取图像的程序,还有用于写入图像的,改变图像的,在图像上加文字的....功能十分强大
在使用时需要定义
#define STB_XXXX_WRITE_IMPLEMENTATION
这个XXXX是这个头文件的名字
不然使用不了.....
在头文件stb_image.h
stbi_load(const char *filename, int *x, int *y, int *comp, int req_comp)
第一个参数时图像的名字,第二第三个参数会返回图像的长宽,第四个参数返回图像的通道数,第五个定义需要读取的通道数。
一般来说,一张图片顶端的Y值是0,底部的Y值是1,也就是Y轴颠倒了。
stb提供了函数来反转y轴
stbi_set_flip_vertically_on_load(int flag_true_if_should_flip)
头文件stb_image_write.h
我常用的函数是这个
stbi_write_jpg(const char *filename, int x, int y, int comp, const void *data, int quality)
x,y定义写入图像的大小,comp定义通道数,data是要写入的数据....
对于写入y轴也能翻转
stbi_flip_vertically_on_write(int flag)
由于我的代码是复用了之前的一个实验里的,我就不放了...
在书中作者实际上做了一个简单的nearest过滤,简单来说就是选择了离采样点最近的那个像素。
渲染出来的图如下,像素感十足
于是我顺手写了个三线性插值,虽然变糊了...但是像素感没了啊
至于实现...可以看我的github仓库
https://github.com/feiqi3/rayTracer/tree/ray_tracing_next_week