GLfloat之间的比较

Comparison between GLfloats

本文关键字:比较 之间 GLfloat      更新时间:2023-10-16

所以,我正在为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;

两者属于同一类,但颜色是静态的。希望有人知道这个问题。

直接比较双打是个坏主意。你可以使用>=而不是==,或者做一些类似的事情

if(fabs(colors[selectedSquare][i] - maxColor) > delta)

其中delta是要使用的精度。

你的问题是-双打从来没有像你期望的那样存储。数字末尾总是有波动,远远超出逗号分隔的部分。