RayTracer in One Weekend
2天完成ray tracer (0/N)
睡前挖坑,最近在看的一个教程,先放链接生肉
https://drive.google.com/drive/folders/14yayBb9XiL16lmuhbYhhvea8mKUUK77W
目前进度在chapter 5, 理解程度在chapter 4(大概吧)。后续会挤时间更新。
chapter 0 overview
【原作者寄语】
最终完成的光线追踪器将不具有所有feature,但是tracer拥有间接光照,这是一项众多电影中用到的技能。最终出品的Ray tracer易于扩展。
作者排斥modern C++特性,但是保留了常用的继承与操作符重载(inheritance & operator overloading)
chapter 1 输出图像
因为在熬夜所以图片等之后白天更新在加吧
使用fstream将文件内容写入到ppm文件中,windows系统不支持ppm文件的直接读取
文件头如下
P3
3 2
255
P3表示通道值为ascii, 3列2行 3cols 2rows 最大值为255
每一行写入单个像素点RGB像素值
图 1 output.ppm文件数据详细
C++写入文件采用fstream来完成数据的写入
#include <fstream>
std::string strImageSavePath = "d:/output.ppm";
std::ofstream ofsImageSave(strImageSavePath, std::ios::out);
ofsImageSave << "P3\n" << nx << " " << ny << "\n255\n";
ofsImageSave << col_r << col_g << col_b << std::endl;
ofsImageSave.close();
图2 ppm文件数据写入代码(运行结果见图3)
将程序中std::cout替换为文件写入,写入ppm header与数据即可完成ppm文件数据写入工作。
图3 运行结果如下(output.ppm数据应与图1又出入)
结语
以上代码均经过测试(fstream需要自己改一下,但是应该没啥问题8,大概…)
多多动手,编译器会告诉你答案,欢迎留言,后续会继续更新,我是牛x山靓仔。
reference
[1]:https://drive.google.com/drive/folders/14yayBb9XiL16lmuhbYhhvea8mKUUK77W (原始教程)
[2]: https://github.com/petershirley/raytracinginoneweekend (仓库地址)
[3]:https://download.imagemagick.org/ImageMagick/download/binaries/ImageMagick-7.0.11-3-Q16-HDRI-x64-dll.exe (windows图像打开工具)
[4]:https://www.zhihu.com/search?type=content&q=%E4%B8%A4%E5%A4%A9%E5%AD%A6%E4%BC%9A%E5%85%89%E7%BA%BF%E8%BF%BD%E8%B8%AA
(贴个知乎专栏帮助了解吧 知乎搜索两天学会光线追踪 我应该会花很多天就是了)