现代计算机图形学-作业3
本文会记录一些在做这个作业时候学习到的点,而不去谈论作业本身
同时也可以更深刻的体会到,纸上得来终觉浅,绝知此事要躬行。在做的过程中会激发我们很多在学习听课的时候想不到的问题,于是更能触碰到原理,体会所学的知识。
首先要推荐看一篇文章,讲解矫正透视插值
然后我们从头开始说这个渲染的过程
首先我们会获得一系列的三角形,每个三角形三个顶点。我们会获得顶点坐标,顶点坐标对应的纹理坐标,顶点坐标对应的法线,以及顶点坐标对应的颜色
然后我们对于一系列的三角形进行坐标变换,但是这里要注意,透视投影后,插值的结果并不等于在原空间插值的结果,所以在开始处理的时候,我们只是进行了model和view的变换
同时,存下点在透视变换前的坐标是很有必要的,因为我们需要原始的位置去计算有关光照的各项因子
细心的同学可能会发现,在作业二中深度插值有一个系数,叫w_reciprocal,那么这个系数是干什么的呢?
其实在作业二中,我们在计算深度的时候就是在透视投影以后才计算的,也就是说那时候的深度值已经不对了。所以我们需要这个系数来帮助我们矫正透视投影所造成的偏差
具体的大家可以看我上面推荐的文章,在对透视投影后的坐标进行插值后,再乘上这个矫正系数,我们就可以得到原始的深度值了
所以同理,深度可以被看做是我们在透视投影后每个点的一个属性,那么同理,其他的属性,例如颜色,法向量,也就都可以用一样的方法进行矫正了
还有一个很关键的点,如果我们把透视投影矩阵写出来,乘上一个任意点,最后我们会发现这个点的w,也就是代表是点还是向量的那个值,会变成这个点原始的深度
这时候我们在计算的时候也就自然而然的用上了这个值,在代码中有多个地方可以体现
还有就是代码框架中一个错误的点,就是我们在用shader计算颜色的时候,实际上这时候我们的坐标已经是进行了model和view变换的坐标了,所以摄像头的位置应该是在原点。
对于有关光照的计算,其实都是代码实现的细节,这里就不在多赘述,如果有兴趣可以来我的github看
最后贴出一张牛牛的图片
文章评论