v4vendeta's homepage

Home | About | Contacts | Blogs| Others

Ray Tracing in One Weekend Summary I - Output Image

输出图片

原文中使用的图片是ppm格式,而大多数电脑中不支持ppm格式的读取,因此我使用了一个开源库svpng,可以将rgb颜色信息直接保存到png文件中

项目地址: svpng

将颜色信息写入png文件的的C++代码如下

#include "svpng.inc"

int main() {

    int nx=200,ny=150;// width & height
    unsigned char rgb[nx * ny * 3], *p = rgb;
    FILE *fp = fopen("test.png", "wb");
    for (int j = ny-1; j >= 0; j--)
        for (int i = 0; i < nx; i++) {
            float r = float(i) / float(nx);
            float g = float(j) / float(ny);
            float b = 0.2;
            *p++ = int(255.99*r);    /* R */
            *p++ = int(255.99*g);    /* G */
            *p++ = int(255.99*b);    /* B */
        }
    svpng(fp, nx, ny, rgb, 0);
    fclose(fp);
    return 0;
}

渲染出的图片如下

图片中像素从左到右,从上到下输出

可以看出,从左到右,红色通道的值越来越大,图像越来越红,从上到下,绿色通道的值越来越大,图像越来越绿

.. ... ...