从未由着色器处理的位置照亮基元
Posted
技术标签:
【中文标题】从未由着色器处理的位置照亮基元【英文标题】:Lighting Primitives From Positions That Aren't Processed By Shaders 【发布时间】:2014-01-16 22:31:09 【问题描述】:我有一个计算漫反射光照值的着色器。它由一个顶点和一个片段着色器组成,用于计算每个顶点的光照强度。但是,正如预期的那样,如果我有一个较大的GL_TRIANGLE
,其灯光位置位于三角形中心上方,则应该照亮它的灯光不会出现,因为灯光值是在三角形表面上平滑插值的基于顶点计算。
所以我的问题是——一个图元如何在一个顶点以外的位置被光源照亮?
【问题讨论】:
【参考方案1】:当您在顶点处进行光照时,您是在进行 Phong 光照,它在顶点处计算颜色,然后仅对在顶点处计算的颜色(即 Gouraud 着色)进行插值图元中的所有像素。如果您要计算每个像素的照明颜色,您会得到 Phong shading。鉴于您的场景,如果您将光照计算从顶点着色器移至片段着色器,并在图元中插入法线,您应该会得到更好的结果。
如果您将顶点法线设为可变变量并在片段着色器中对其进行归一化,然后进行光照计算,您应该会得到更好的结果。
【讨论】:
以上是关于从未由着色器处理的位置照亮基元的主要内容,如果未能解决你的问题,请参考以下文章
OpenGL学习随笔-- 顶点着色器(VertexShader)