2012-12-17 71 views
1

所以,我正在做一個opengl的小代碼,它選取一個正方形的顏色並對其值進行求和,所以顏色會更加明亮。我有一個數組中每個正方形的顏色值,並且我得到一個變量來保存顏色的最大一個元素的值,在這種情況下,該值爲1。 這是函數GLfloats之間的比較

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

你的'maxColor'是如何定義的? – Yuushi

+1

除非你真的想讓你的生活變得困難,否則將if(colors [selectedSquare] [i] == maxColor)'改爲'if(colors [selectedSquare] [i]> = maxColor)'。你可以做一個近似的比較,但這會比較容易一些。 –

+0

是Yuushi'maxColor'是在類構造函數中定義的,但現在我已將其更改爲'#define MAX_COLOR',但問題仍然相同。 – user1905910

回答

1

直接比較雙打是一個壞主意。你可以使用> =,而不是==或做類似

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

其中,δ是您要使用的精度。

你的問題是 - 雙打從來沒有儲存正好,因爲你似乎期望他們是。數字末尾總是會出現波動,遠遠超出了逗號分隔的部分。