0

画面を黒と白のピクセルで塗りつぶすことになっている SDL を使用して C コードの一部に取り組んでいます... for ループを使用して画面を塗りつぶし、乱数を使用して各ピクセルが黒か白かを決定します。

しばらくは正常に機能し始めますが、画面が完全に白くなり、そのままの状態になるまで、白いピクセルが徐々に表示され始めます。ここで何が間違っているのかわかりません。コンソールに数値を num で出力すると、画面が白いときでもランダムな 1 と 0 が表示され続けるため、if else ステートメントまたは for ループのどこかに問題があると思います。

関連するコードは次のとおりです...

 /*outside main program loop*/
 17   int x, y, num;
 18   srand(time(0));

 /*inside main program loop*/
 28     for(y=0;y<=480;y++) { 
 29       for(x=0;x<=640;x++) {
 30         num = rand() % 2;
 31         if(num == 0) {
 32           pixelRGBA(screen, x, y, 255, 255, 255, 255);
 33         }
 34         else {
 35           pixelRGBA(screen, x, y, 0, 0, 0, 0);
 36         }
 37       }
 38     } 
 39     SDL_Flip(screen);
4

2 に答える 2

5

2 つの問題:

pixelRGBA(screen, x, y, 0, 0, 0, 0);

RGBA はアルファがあることを意味し、アルファを透明に設定したため、黒いピクセルはレンダリングされません。アルファブレンディングの場合、ピクセルにアルファが乗算され、既存のピクセルに逆数が乗算され、2 つのピクセルが加算されます。したがって、ゼロのアルファを使用すると、新しいピクセルは取得されず、既存のピクセルはすべて取得されます。

また、ループは < ではなく <= であるため、プロットするピクセルが多すぎます。

for(y=0;y<480;y++)
{ 
    for(x=0;x<640;x++)
    {
        num = rand() % 2;
        if(num == 0) {
            pixelRGBA(screen, x, y, 255, 255, 255, 255);
        } else {
            pixelRGBA(screen, x, y, 0, 0, 0, 255);
        }
    }
} 
于 2012-12-23T09:45:32.090 に答える
4

ある場合には色を完全に不透明にし、別の場合には完全に透明にします。実際、RGB 値はある場合は 0 で、別の場合は 255 である必要がありますが、アルファは両方の場合で同じである必要があると思います。

于 2012-12-23T09:45:40.083 に答える