Games101-Homework3
本章内容
本章讲述Games101的作业3,主要涉及着色部分。
基础部分
实现
- [10 分] 参数插值: 正确插值颜色、法向量、纹理坐标、位置 (Shading Position) 并将它们传递给 fragment_shader_payload.
 - [20 分]Blinn-phong 反射模型: 正确实现 phong_fragment_shader 对应的反射模型。
 - [5 分] Texture mapping: 将 phong_fragment_shader 的代码拷贝到 texture_fragment_shader, 在此基础上正确实现 Texture Mapping,使用下述公式即可,注意公式中light_dir和view_dir都是单位向量。
 

- [10 分] Bump mapping 与 Displacement mapping: 正确实现 Bump mapping 与 Displacement mapping.
 
代码
1  | //Screen space rasterization  | 
1  | //Blinn-Phong  | 
1  | //bump  | 
1  | //Displacement  | 
运行结果
Normal

Blinn-Phong

Texture

Bump

Displacement

提高部分
实现
- [Bonus 3 分] 尝试更多模型: 找到其他可用的.obj 文件,提交渲染结果并 把模型保存在 /models 目录下。这些模型也应该包含 Vertex Normal 信息。
 - [Bonus 5 分] 双线性纹理插值: 使用双线性插值进行纹理采样, 在 Texture 类中实现一个新方法 Vector3f getColorBilinear(float u, float v) 并 通过 fragment shader 调用它。为了使双线性插值的效果更加明显,你应该考虑选择更小的纹理图。请同时提交纹理插值与双线性纹理插值的结果,并进行比较。
 
代码
运行结果
遇到的问题
Blinn-Phong
- light_dir和view_dir没有单位化,就会产生下图情况
 

- 高光没有使用衰减因子p,会产生下图情况
 

Texture
运行时报错,原因是纹理坐标u, v计算出现负数,超出[0, 1]的区间,修改getColor函数如下
1  | Eigen::Vector3f getColor(float u, float v)  |