2天完成ray tracer (0/N)

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
(贴个知乎专栏帮助了解吧 知乎搜索两天学会光线追踪 我应该会花很多天就是了)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值