无法使用glDrawPixels

时间:2012-02-19 00:06:25

标签: c++ c opengl gldrawpixels

我必须使用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的红色方块。

然而,我得到的是底部的一排红色,其他一切都是灰色的。

2 个答案:

答案 0 :(得分:1)

您的第二个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;
    }
}

答案 1 :(得分:1)

你的循环条件对我而言。 (在第一行之后,j上的条件将始终为true,并且内部循环将不会执行。)更简单的方法是执行以下操作:

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;
    } 
}