我正在开发一个简单的 OpenGL 应用程序,该应用程序允许用户通过单击并拖动到左侧(使其不那么强烈)或右侧(更强烈)来调整简单窗口的背景颜色。例如,当向右拖动时,我有这样的事情:
intensity += 0.0001*x; //where x is the current mouse location
...在左边,另一种方式:
intensity -= 0.0001*x;
intensity
是全局静态 GLfloat ,它在显示函数中被传递glClearColor
,被多次调用。当用户在向右拖动时增强颜色时,此策略工作得很好,但在向左拖动时它会在某个点之后变得混乱:当我拖动时颜色变得不那么强烈并返回到应有的黑色,但随后又增强回原色。
我认为问题在于,当我拖得太远时,应该在 0 和 1 之间的强度变得负数,因此,glClearColor
只需将符号改回正数(?)即可解决问题。如果是这种情况,我如何强制传递的值glClearColor
保持在适当的范围内?我试图通过确保当前强度不会变成负值/如果它已经太低就不会发生调整来解决这个问题,但它似乎不起作用:
if(x <= xPrev && intensity >= (.0001*x)) //moving left to de-intensify color
intensity -= 0.0001*x;
...我这样做是否不正确,或者glClearColor
处理负值的方式与我预期的不同?
出现的另一个有趣的问题是我的“强度”调整似乎只适用于 r、g 和/或 b 值(即,我将“强度”作为其中之一传递glClearColor
。使用 a 值不起作用...但它不应该改变颜色强度吗?