我正在开发一个简单的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
中的一个传递。)没用...但是它不应该改变颜色强度吗? 最佳答案
这听起来有点像hysteresis问题。目前尚不清楚事件是如何接收的,或者是什么坐标系x
。可能在按下按钮时放下“锚点”(xStart
),并处理所有后续值,同时拖动该值作为偏移量。您使用什么工具包/库来处理Windows和事件?如果从控制台启动,则可能添加跟踪语句,例如:fprintf(stderr, "%.8e\n", x);
查看x
的值是否与您期望的每一帧相对应。
glClearColor将值限制为[0, 1]
,因此可能不是问题。也许跟踪intensity
会有用吗?
关于c - 用负参数调用glClearColor时会发生什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12593559/