DirectX (8) Phong式着色

引言

            在前面一篇博文中,我已经向大家讲述了三种不同的着色方式,并且着重讲解了Gouraud着色的实现过程,有了前面的理论知识,读者完全有能力自己独自编写一个进行Gouraud着色的渲染器出来,当然也仅限于此而已。在文章的末尾,我说过,将会在下一篇文章中讲述一个更加高效,逼真的着色方式。下面,我们就来一窥究竟吧!!!


Phong式着色

         如果读者,仔细的观看过上篇文章的话,就会发现,我们都是对顶点进行光照计算的。如果我们直接对最后要在屏幕上绘制出来的像素进行光照计算,然后再使用计算后的值绘制,是否效果更加的逼真了???毕竟,这样做了以后,就能够避免使用插值来计算大部分的像素值,而通过插值计算出来的难免会失去真实性。所以,如果能够有一种方法,计算出每一个像素的光照计算后的值,效果应该会很好不是吗???

         的确,如果读者这么想的话,那么就慢慢的靠近了本次博文的重点了。我们将要在像素空间中,对像素进行光照计算,然后将结果写入像素中去。

         Phong式着色就是采用这样的方法。它在像素着色器中,对每一个像素值进行光照计算,从而确定每一个像素的最后结果。我们要在像素着色器中进行光照计算的话,那么我们就需要在像素着色器中获得诸如该像素对应的点的世界坐标,对应点的法线,和诸如光照向量,材质,视点等属性。对于后面的光照向量和材质,视点这种属性,由于在着色器中,是使用全局变量定义的,所以我们能够直接的在像素着色器中使用后面的那些变量。但是,像像素对应的顶点,对应顶点的法线等等,这样的信息该如何获得了?

         在前面,我们使用的都是在顶点着色器中进行光照计算,然后直接将计算后的顶点颜色值,通过Gouraud着色,插值计算出 各个像素颜色,最后在像素着色器中直接返回的。也就是说,如果我们能够将顶点的坐标和法线也通过插值的方式,传递给像素着色器,那么是否就能够实现了?

        读者啊,上面提出的疑问,实际上就是Phong式着色的核心了。Phong式着色,通过插值的方法,将顶点的位置,和法线坐标进行插值,传递到像素着色器上去,然后在像素着色器中进行光照计算,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值