实验二
实验要求:
编写一个光线追踪渲染程序。
实现思路:
参考ray tracing in one weekend学习如何实现光线追踪。
实现了漫反射、镜面反射、折射。
输出ppm格式的图片。
项目包含以下部分:
main.cpp 主程序
camera.h 一个可以定义位置、视线方向、顶部朝向、视角大小、景深的相机
vec3.h 定义向量,并实现与向量相关的运算
ray.h 光线类
hittable.h 物体抽象类
sphere.h 球类,继承物体抽象类
hittable_list.h 物体列表
material.h 材质(包含以漫反射为主的普通材质、以镜面反射为主的金属材质、以折射为主的玻璃材质)
tools.h 一些简单辅助常量、函数
实现结果:
最终结果:
学习过程:
1、一张简单的ppm格式的图片
2、简单的光线追踪
3、加入一个球(此处只考虑光线是否与球相交)
4、根据法向量设置颜色
5、加入一个很大的球作为地面
6、反走样(对一个像素多次采样取平均)
7、漫反射材质
8、金属材质(两侧为金属材质,中间为漫反射材质)
9、玻璃材质(左侧为玻璃材质)
10、调整相机位置、朝向等
11、调整相机景深
12、低分辨率(200×100)、少量球:
渲染出最终结果大概需要7小时,渲染低分辨率少量球大概需要1分钟。
github链接:https://github.com/sdu-graphics/experiments-zxj107/blob/main/experiment2、
参考资料:
https://zhuanlan.zhihu.com/p/128582904
https://zhuanlan.zhihu.com/p/128685960