所以,我正在为 opengl 做一个小代码,它选择一个正方形的颜色并在他的值上求和 0.01,所以颜色会更闪亮。我有一个数组中每个正方形的颜色值,并且我得到一个变量,它保存颜色的最大一个元素的值,在这种情况下,这个值为一。这是功能的一部分
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()测量大小,colors和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;
两者属于同一类,但颜色是静态的。希望有人知道这个问题。