GLfloat之间的比较
Comparison between GLfloats
所以,我正在为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是要使用的精度。
你的问题是-双打从来没有像你期望的那样存储。数字末尾总是有波动,远远超出逗号分隔的部分。
相关文章:
- 禁止指针和整数之间的比较C++
- ISO C++禁止指针和整数 [-fpermissive] [c++] 之间的比较
- 比较它们之间的元素并获取公共值的键
- 零点和布尔值之间的比较
- 我的 c++ 程序似乎没有发现字符串和我拥有但输入使用 getline 的变量之间的比较
- C++ - 负数和正数之间的比较返回 false
- Qt 错误 iso c++ 禁止指针和整数之间的比较 -permissive
- C++模板参数之间的比较似乎被忽略了
- 为什么C++容器之间存在比较运算符
- 错误:ISO C++禁止在指针和整数 [-fallowive] 之间进行比较
- 数字之间的比较
- C++ - 比较模板和类之间的数据类型
- 获取字符串大小的各种方法之间的比较
- 比较器的两个实现之间的差异
- 如何修复C++中的"指针和整数之间的比较"错误?
- 不同指针类型之间的无效比较:'type*' 和 'type&(*)()'
- 符号和未签名整数表达式之间的比较,以进行循环误差
- 比较C 中移动和智能指针之间的习惯
- Python,C ,C#和Java中的字符串比较之间的差异
- 与表达式或变量进行比较之间的性能差异