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;
都屬於同一類,但顏色是靜態的。 希望有人知道這個問題。
你的'maxColor'是如何定義的? – Yuushi
除非你真的想讓你的生活變得困難,否則將if(colors [selectedSquare] [i] == maxColor)'改爲'if(colors [selectedSquare] [i]> = maxColor)'。你可以做一個近似的比較,但這會比較容易一些。 –
是Yuushi'maxColor'是在類構造函數中定義的,但現在我已將其更改爲'#define MAX_COLOR',但問題仍然相同。 – user1905910