だから、私は 1 つの正方形の色を選択し、その値に 0.01 を合計する opengl の小さなコードを実行しているので、色はより輝きます。1 つの配列に各正方形の色の値があり、色の最大 1 つの要素の値を保持する 1 つの変数を取得しました。この場合、この値は 1 です。これは関数の一部です
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;
どちらも同じクラスに属しますが、色は静的です。誰かが問題を知っていることを願っています。