【问题标题】:OpenGL issue with calculating reflection/refraction and uniforms计算反射/折射和制服的OpenGL问题
【发布时间】:2021-10-21 18:53:36
【问题描述】:

我正在尝试计算反射/折射,但我执行了一个

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

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

【问题讨论】:

  • gl_FragColor = mix(objectColor, environmentColor, 1.0f); 等于 gl_FragColor = environmentColor;。所以objectColor 没有被使用,因此lightPosition 也没有被使用。出于调试原因尝试gl_FragColor = mix(objectColor, environmentColor, 0.5);

标签: c++ opengl glsl shader fragment-shader


【解决方案1】:

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

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

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

等于

gl_FragColor = environmentColor;

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

【讨论】:

  • 补充:这种行为被描述为here
猜你喜欢
  • 2015-02-05
  • 2013-01-06
  • 2018-09-28
  • 1970-01-01
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
  • 2021-04-01
  • 2011-08-30
相关资源
最近更新 更多