Question

Je dois utiliser glDrawPixels pour mettre en œuvre un algorithme de trame.

En ce moment, je n'essayer d'obtenir un exemple simple de travailler avec glDrawPixels mais ayant un problème.

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();

Au-dessus est le code que je suis en train de se rendre au travail, je crois comprendre qu'il devrait simplement dessiner un carré rouge 512x512.

Mais ce que je reçois est une ligne rouge en bas et tout le reste est gris.

Était-ce utile?

La solution

Votre deuxième boucle de for() est cassé -. Vous commencez à i, mais seulement aller jusqu'à width * 3, il ne fonctionne pas du tout quand i > 0

Voici une approche plus simple:

GLbyte *p = image;
for (i = 0; i < height; i++) {
    for (j = 0; j < width; j++) {
        *p++ = 0xFF;
        *p++ = 0x00;
        *p++ = 0x00;
    }
}

Autres conseils

Vos conditions de boucle de voir sur moi. (Après la première ligne, la condition sur j sera toujours vrai, et la boucle intérieure ne sera pas exécuté.) Un moyen plus facile de le faire serait de faire quelque chose comme ceci:

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;
    } 
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top