从未由着色器处理的位置光照基元
Lighting Primitives From Positions That Aren't Processed By Shaders
我有一个用于计算漫射照明值的着色器。它由一个顶点和一个片段着色器组成,用于计算每个顶点的照明强度。但是,正如预期的那样,如果我有一个具有光源位置的大GL_TRIANGLE
,例如,就在三角形的中心上方,则不会出现应该照亮它的光,因为光值是根据顶点计算在三角形表面上平滑插值的。
所以我的问题是 - 基元如何被光源在其顶点以外的位置照亮?
当您在顶点进行照明时,您正在执行 Phong 照明,即在顶点处计算颜色,然后仅将顶点计算的颜色(即 Gouraud 着色)插值到基元中的所有像素。 如果要计算每个像素的照明颜色,则会得到Phong阴影。 根据您的方案,如果将光照计算从顶点着色器移动到片段着色器,并在基元中插值法线,则应获得更好的结果。
如果使顶点法线成为可变变量并在片段着色器中对其进行规范化,然后进行光照计算,则应获得更好的结果。
相关文章:
- 0x0F50DF58:0xC0000005:访问冲突读取位置0x0047CA04时未处理的异常
- 错误 在测试.exe 0x76C9FD62时出现未经处理的异常:Microsoft C++异常:内存位置0x006FF8
- Box2D 如何处理位置和坐标?
- 最简单的方法使多个指针一次指向同一位置,一次只处理2个位置
- 如何处理更改插入符号位置的事件
- 如何修复<程序名称>中的"<内存位置>未处理的异常。Visual Studio 2017 中的访问冲突写入位置<内存位置>"
- ***读取位置*******的访问冲突处出现未处理的异常
- 在0x77081D76(ntdll.dll)中未经处理的例外.Exe:0xc0000005:访问违规写作位置0x0000
- NVIDIA 在 <work.exe>0xC0000005 中0x002a2da2未处理的异常:访问违规读取位置0x00000000
- 未处理的异常..访问冲突写入位置
- 在 DirectXGame.exe 中0x00B84CD6出现未经处理的异常:0xC0000005:访问冲突读取位置0x
- 存储类对象的C++模板链表-未处理的异常访问冲突读取位置
- 未处理的异常:_com_error内存位置 0x0040f4ac
- Dijkstra 中0x001e1078 s_Algorithm.exe的未处理异常:0xC0000005:访问冲突读取位置0xbaadf00d
- 从未由着色器处理的位置光照基元
- 位置处未处理的异常:内存位置处的Microsoft C++异常:std::length_error
- 更改QGraphicsItems在场景事件处理程序中的位置
- 读取位置/使用结构的矢量时发生未处理的异常访问冲突
- 使用新位置处理内存
- 在C++函数中的适当位置处理参数