我知道传统的opengl只支持平面和gouraud阴影,但我想知道为什么不能使用phong阴影?
有人说这是不可能的,因为遗留的opengl丢弃了法线,但我不知道它们被丢弃的地方以及丢弃它们的原因.
即使是传统的openGL也不会丢弃法线.阴影的不同之处在于,为了节省阴影时间,传统的opgenGL只计算每个顶点位置的阴影值,为顶点计算的3种颜色之间的每个三角形混合颜色.
此方法也称为Gouraud着色.
另一方面,Phong着色将计算屏幕上呈现的每个像素的光照值 - 不仅仅是顶点,而是以某种方式"猜测"所有其他光照值.
很可能选择了Gouraud阴影,因为它涉及的计算量要少得多,它可以实现相对逼真的近似.
Phong着色可以实现更逼真的近似,但计算上的差异可能非常大.
屏幕上显示的单个四边形只需要4个或多或少复杂的顶点计算,而在它们之间的混合在计算时间方面会便宜得多.
另一方面,Phong着色将对构成四边形的每个像素执行光照计算,这可以非常快速地进行大量计算.想象一下,你的四边形被光栅化到一个(100 x 100)像素的区域.
根据INT顺序形状拿得出一个必须执行的每像素的计算数量可显着高于屏幕的分辨率时,如果有很多模糊的物体会首先绘制的,因为他们将全部通过深度测试刚需后来透支了.
执行快速Phong着色的遗留opengl中缺少的不是任何丢失或以其他方式丢弃的法线,而是一种非常快速地执行所提及的每像素操作的方法.这可以通过所谓的着色器实现.在图形硬件上运行的小程序.
传统的opengl不允许在如此精细的级别上自定义渲染过程,因为整个渲染过程只能在所谓的固定功能管道中的几个预定义位置进行混合.
除了你被告知使用传统opengl 尝试执行Phong着色的主要问题不是任何法线被丢弃,而是它不是设计用于执行每像素照明而是仅用于每顶点照明.
| 归档时间: |
|
| 查看次数: |
539 次 |
| 最近记录: |