所以,我正在为opengl做一些代码,它选择一个正方形的颜色,并在其值上加0.01,所以颜色会更闪亮。我有一个数组中每个方块的颜色值,我得到一个变量,它保存颜色的最大一个元素的值可以去,在这种情况下,这个值是1。 这是函数的一部分
for(GLint i = 0; i < 3; i++) {
if(colors[selectedSquare][i] > 0) {
colors[selectedSquare][i] += 0.01;
if(colors[selectedSquare][i] == maxColor) {
flag = false;
}
}
}
我在glutTimerFunc中调用此函数,并且每次都改进0.01的颜色值。当颜色的值变为1时(maxColor),我开始减少函数其他部分的颜色。 这里的问题是比较
(colors[selectedSquare][i] == maxColor)
永远不会成真,我做了一些输出来检查,这就是我得到的
colors[selectedSquare][i] value = 0.99 size = 4
maxColor value = 1 size = 4
(colors[selectedSquare][i] == maxColor) is 0
colors[selectedSquare][i] value = 1 size = 4
maxColor value = 1 size = 4
(colors[selectedSquare][i] == maxColor) is 0
colors[selectedSquare][i] value = 1.01 size = 4
maxColor value = 1 size = 4
(colors[selectedSquare][i] == maxColor) is 0
colors[selectedSquare][i] value = 1.02 size = 4
maxColor value = 1 size = 4
(colors[selectedSquare][i] == maxColor) = 0
但有趣的是从这里开始,当我将比较改为
时((int)colors[selectedSquare][i] == maxColor)
我得到了这个输出
colors[selectedSquare][i] value = 0.99 size = 4
maxColor value = 1 size = 4
(colors[selectedSquare][i] == maxColor) is 0
colors[selectedSquare][i] value = 1 size = 4
maxColor value = 1 size = 4
(colors[selectedSquare][i] == maxColor) is 0
colors[selectedSquare][i] value = 1.01 size = 4
maxColor value = 1 size = 4
(colors[selectedSquare][i] == maxColor) is 1
colors[selectedSquare][i] value = 1.02 size = 4
maxColor value = 1 size = 4
(colors[selectedSquare][i] == maxColor) is 1
我使用sizeof()测量大小,颜色声明和maxColor就是那样
GLfloat (Memoria::colors)[9][3] = {
{ 0.80, 0.80, 0.00 },
{ 0.00, 0.80, 0.80 },
{ 0.80, 0.00, 0.00 },
{ 0.00, 0.80, 0.00 },
{ 0.00, 1.00, 1.00 },
{ 1.00, 0.00, 0.00 },
{ 1.00, 0.00, 1.00 },
{ 1.00, 1.00, 0.00 },
{ 1.00, 1.00, 1.00 },
};
const GLfloat maxColor;
两者都属于同一个类,但颜色是静态的。 希望有人知道这个问题。
答案 0 :(得分:1)
直接比较双打是一个坏主意。您可以使用&gt; =代替==或执行类似
的操作if(fabs(colors[selectedSquare][i] - maxColor) > delta)
其中delta是您要使用的精度。
你的问题是 - 双打永远不会像你期望的那样完全存储。数字末尾的波动总是远远超出逗号分隔部分。