0

ラスターアルゴリズムを実装するには、glDrawPixelsを使用する必要があります。

現在、glDrawPixelsが機能しているという簡単な例を取得しようとしていますが、問題があります。

GLint height, width, size = 0;
GLbyte *image = NULL;
int i,j=0;

width = 512;
height = 512;
size = width*height;
image = (GLbyte*)malloc(sizeof(GLbyte)*size*3);

for(i = 0; i < size*3; i=i+width*3){
    for(j = i; j < width*3; j=j+3){
        image[j] = 0xFF;
        image[j+1] = 0x00;
        image[j+2] = 0x00;
    }
}

glDrawPixels(width, height, GL_RGB, GL_BYTE, image);

free(image);
gluSwapBuffers();

上記は、私が機能させようとしているコードです。私の理解では、512x512の赤い正方形を描画するだけです。

しかし、私が得たのは下部にある1つの赤い行で、それ以外はすべて灰色です。

4

2 に答える 2

1

2番目のfor()ループは壊れています-から始めていますがi、までしか上がってwidth * 3いないので、。のときはまったく実行されませんi > 0

より簡単なアプローチは次のとおりです。

GLbyte *p = image;
for (i = 0; i < height; i++) {
    for (j = 0; j < width; j++) {
        *p++ = 0xFF;
        *p++ = 0x00;
        *p++ = 0x00;
    }
}
于 2012-02-19T00:15:45.780 に答える
1

あなたのループ状態は私には見えません。(最初の行の後、jの条件は常に真になり、内部ループは実行されません。)これを行う簡単な方法は、次のようにすることです。

for (y = 0; y < height; y++)
{
    // Go to the start of the next row
    GLbyte* rowStart = image + (width * 3) * y;
    GLbyte* row = rowStart;
    for (x = 0; x < width; x++)
    {
        row [ x * 3 ] = 0xFF;
        row [ (x * 3) + 1 ] = 0x00;
        row [ (x * 3) + 2 ] = 0x00;
    } 
}
于 2012-02-19T00:17:31.293 に答える