opengl 如何在GLSL中实现Phong着色?

r1zhe5dt  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(168)

我在GLSL中实现了一个Phong着色器,但是我没有得到我应该得到的镜面反射。我理解它的方式,它和Gouraud着色一样,但是不是在顶点着色器中进行所有的计算,而是在片段着色器中进行。以便对法线进行插值,然后在每个像素上应用phong模型。作为任务的一部分,我还必须开发Gouraud着色器,它的工作原理与设想的一样,我认为您只需要将顶点着色器代码放入片段着色器,但似乎并非如此。
我在顶点着色器中所做的就是将顶点位置转换为视图坐标,并将模型视图矩阵的转置逆矩阵应用于顶点法线。然后,在片段着色器中,我仅将视图转换应用于光照位置,并使用这些坐标来计算Phong模型中所需的矢量。光照几乎是正确的,但是缺少了一些反射光。所有的参数都已经测试过了,所以我认为是光的位置不对,但是我不知道为什么我的代码在其他着色器中不起作用。另外,我知道这不是最有效的方法(预先计算正规矩阵会更快),我只是想首先让它正常工作。

34gzjxbg

34gzjxbg1#

问题在于如何计算光源位置。

vec3 l = normalize(mat3(VMatrix)*light);

将光线视为一个方向(通过将其归一化,并且因为视图矩阵的平移部分被忽略),但它实际上是一个位置。

vec3 l = (VMatrix * vec4(light, 1.0)).xyz

相关问题