繁体   English   中英

用负参数调用glClearColor时会发生什么?

[英]What happens when you call glClearColor with a negative argument?

我正在开发一个简单的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 “强度”作为glClearColor中的值之一glClearColor 。使用a值没有工作...但是不应该改变颜色强度吗?

这听起来有点像磁滞问题。 目前尚不清楚事件的接收方式或x所在的坐标系。可能会在按下按钮时放下“ anchor”( xStart ),并处理所有后续值,同时从该值开始偏移以进行拖动。 您使用什么工具包/库来处理Windows和事件? 如果从控制台启动,则可能添加跟踪语句,例如:

fprintf(stderr, "%.8e\\n", x);

看看x的值是否与您期望的每一帧相对应。

glClearColor将值限制为[0, 1] ,所以可能不是问题。 也许追踪intensity会有用吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM