gpt4 book ai didi

opengl - 旧版 opengl - 为什么 phong 着色不可能?

转载 作者:行者123 更新时间:2023-12-02 05:08:22 24 4
gpt4 key购买 nike

我知道旧版 opengl 只支持平面和 gouraud 着色,但我想知道为什么 phong 着色是不可能的?

有人说这是不可能的,因为遗留的 opengl 丢弃了法线,但我不知道它们在哪里被丢弃,也不知道它们为什么被丢弃。

最佳答案

即使是传统的 openGL 也不会丢弃法线。在着色方面的不同之处在于,为了节省着色时间,传统 opgenGL 仅计算每个顶点位置的着色值,混合为顶点计算的 3 种颜色之间的每个三角形的颜色。

这种方法也称为高氏着色

另一方面,

Phong 着色 将为屏幕上呈现的每个像素计算照明值 - 不仅仅是顶点,并以某种方式“猜测”所有其他照明值。

猜猜为什么...

很可能选择了 Gouraud 着色,因为它涉及的计算量要少得多,它可以实现相对逼真的外观。

Phong 着色 可以实现看起来更逼真的近似值,但计算上的差异可能非常大。

例子

屏幕上显示的单个四边形只需要 4 次或多或少的顶点复杂计算,而在这些之间进行混合在计算时间方面会便宜得多。

另一方面,Phong 着色将为构成四边形的每个像素执行照明计算,这可以非常快速地进行大量计算。例如,假设您的四边形被光栅化为 (100 x 100) 像素的区域。

根据绘制形状的顺序,如果首先绘制大量被遮挡的对象,则必须执行的每像素计算的数量可能会大大大于屏幕的分辨率,因为它们都会通过 深度测试只是为了稍后 overdraw 。

缺少什么?

遗留 opengl 中缺少执行快速 Phong 着色 的不是任何丢失或以其他方式丢弃的法线,而是一种非常快速地执行上述每像素操作的方法。这可以通过所谓的着色器实现。在图形硬件本身上运行的小程序。

旧版 opengl 不允许在如此细粒度的级别自定义渲染过程,因为整个渲染过程只能在所谓的固定功能管道中的几个预定义位置进行调整.

总结

除了您被告知尝试使用遗留 opengl 执行 Phong 着色 的主要问题不是丢弃任何法线,而是它不是设计为执行每像素 光照但只有逐顶点光照。

关于opengl - 旧版 opengl - 为什么 phong 着色不可能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15911806/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com