By zhangpiu
--- 一个C++实现的简单光线追踪渲染引擎,实现了局部光照(Local illumination),全局光照(Global illumination)。主要包括: 1. RayTrace: 一个简单的光线追踪渲染器,实现了局部光照 2. PathTrace: 一个简单的光线追踪渲染器,实现全局光照(via unbiased Monte Carlo path tracing); 3. PXM tools: 一个简单读写 PPM / PGM / PBM 图像格式的工具; 4. Image processing: 有关图像处理的工具,如 box blur, median blur, biliteral blur, etc. 这里参考了Milo
大神的两篇博文:《用JavaScript玩转计算机图形学(一)光线追踪入门》,《用JavaScript玩转计算机图形学(二)基本光源》。在原来的基础上加了一些改进,并用C++予以实现。以下展示一些渲染效果:
- 平行光光源
- 点光源
还可以添加多个光源
- 聚光灯光源
可以用聚光灯的效果渲染一个调色板
这里的全局光照算法是基于Mento Carlo的路径追踪算法,参考了Kevin Beason
大神的经典之作《smallpt: Global Illumination in 99 lines of C++》,并作了一些改进。但由于加了一些类的封装等,有些对象的拷贝会增加额外的开销,本实现版本的速度其实不及原来的99行的实现,这里不准备再用牺牲可读性来换取时间的优化。