作业3的相关问题
作业3的基本更正:http://games-cn.org/forums/topic/%e4%bd%9c%e4%b8%9a3%e6%9b%b4%e6%ad%a3%e5%85%ac%e5%91%8a/
作业3参考代码:https://blog.csdn.net/weixin_43789369/article/details/121456647
作业3问题详解:https://zhuanlan.zhihu.com/p/509902950
此处提到的深度问题,即v=t.toVector4()中w=1的问题似乎不影响我们对相对深度的求解,当然其结果可能有误。
关于透视投影,我们在如上文详解中加入一个翻转矩阵即可,实际上投影矩阵似乎不影响我们对深度的计算。
persp2ortho<<n,0,0,0,
0,n,0,0,
0,0,n+f,-n*f, //0,0,-n-f,-n*f 似乎能得到一样的结果 在这里的深度似乎是单独计算的
0,0,-1,0;
另一个问题是在fragment_shader中,给出了eye_pos,实际上,我们已经转换到了view space,如https://games-cn.org/forums/topic/zuoyesanzhongphong_fragment_shaderjisuanguangyuanfangxiangwenti/所说,我们应该以`(0,0,0)`作为相机的位置。
在光栅化过程中,我们采用二维求得的重心坐标对透视变换之前的值进行重心插值,实际上的结果是错误的,不过其结果较为近似,因此这里就直接使用了。
float Z = 1.0 / (alpha / v[0].w() + beta / v[1].w() + gamma / v[2].w());
float zp = alpha * v[0].z() / v[0].w() + beta * v[1].z() / v[1].w() + gamma * v[2].z() / v[2].w();
zp *= Z; //深度透视矫正
这一部分代码是对深度进行了透视矫正,详见上面的问题详解。
最后在完成附加项读取别的模型时,我们需要注意在blender导出.obj文件时,勾选上Triangulated meshes这个选项,否则将在文件中出现无法解析的除三角形以外的形状导致最终的结果出现问题。
代码参考:
https://blog.csdn.net/weixin_43789369/article/details/121456647
https://blog.csdn.net/m0_53161412/article/details/123213865
额外阅读:
凹凸贴图、法线贴图、切线空间、TBN矩阵讲解:
https://zhuanlan.zhihu.com/p/412555049
这里有一些有意思的文章:
