Ray TracingThe Next Week:图像映射

stb图像库

这一章唯一值得一提的就是这个图像处理库了,单头文件,功能强大,仓库地址: 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

END

留言