总览

在这次编程任务中,我们会进一步模拟现代图形技术。我们在代码中添加了 Object Loader(用于加载三维模型),Vertex Shader 与 Fragment Shader,并且支持了纹理映射。

代码框架

在本次实验中,你需要修改如下函数:

  1. rasterize_triangle(const Triangle& t) in rasterizer.cpp:在此处实现与作业 2 类似的插值算法,实现法向量、颜色、纹理颜色的插值。
  2. get_projection_matrix() in main.cpp:将你自己在之前的实验中实现的投影矩阵填到此处,此时你可以运行 ./Rasterizer output.png normal 来观察法向量实现结果。
  3. phong_fragment_shader() in main.cpp:实现 Blinn-Phong 模型计算 Fragment Color。
  4. texture_fragment_shader() in main.cpp:在实现 Blinn-Phong 的基础上,将纹理颜色视为公式中的 kd,实现 Texture Shading Fragment Shader。
  5. bump_fragment_shader() in main.cpp:在实现 Blinn-Phong 的基础上,仔细阅读该函数中的注释,实现 Bump mapping。
  6. displacement_fragment_shader() in main.cpp:在实现 Bump mapping 的基础上,实现 displacement mapping。

相比上次实验,我们对框架进行了如下修改:

拓展