计算 reflection/refraction 和制服的 OpenGL 问题

OpenGL issue with calculating reflection/refraction and uniforms

我正在尝试计算 reflection/refraction 但我执行了

gl_FragColor = mix(objectColor, environmentColor, 1.0f);

我开始收到制服错误,找不到我的 lightPosition 制服。这没有意义,因为我正在使用该制服来计算漫射照明,并且当我将混合功能删除到 gl_FragColor = objectColor; 时它很好。我不确定我做错了什么,如果有人能提供帮助,我将不胜感激。

mix(x, y, a)可以表示为x*(1.0−a) + y*a.

mix 的最后一个参数是一个常量。因此表达式可以由编译器优化。

gl_FragColor = mix(objectColor, environmentColor, 1.0f); 

等于

gl_FragColor = environmentColor;

所以 objectColor 没有被使用,因此 lightPosition 也没有被使用。因此制服 lightPosition 不是活动的程序资源。