开发者

Checkerboard w/ openGL glRecti

I have a pretty straightforward question. We are asked to make a checkerboard using glRecti in c++ using visual basic 2010. Here's what I have so far and was wondering if anyone can point me in the right direction.

#include <gl/glut.h>

void myInit(void)
 {
    glClearColor(1.0,1.0,1.0,0.0);       // set white background color
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity();
    gluOrtho2D(0.0, 640.0, 0.0, 480.0);
}

void drawChecker(int size)
{
    int i = 0;
    int j = 0;
    for (i = 0; i < 7 ; i++) {
        if((i + j)%2 == 0) // if i + j is even
            glColor3f( 0.4, 0.2, 0.6);
        else
开发者_如何转开发            glColor3f( 0.2, 0.3, 0.4);
        glRecti(i*size, j*size, size, size);    // draw the rectangle
        j++;
    }
    glFlush();
}

void checkerboard(void) {
    glClear(GL_COLOR_BUFFER_BIT);     // clear the screen 
    drawChecker(32);

}

void main(int argc, char** argv)
{
    glutInit(&argc, argv);          // initialize the toolkit
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); // set display mode
    glutInitWindowSize(640,480);     // set window size
    glutInitWindowPosition(100, 150); // set window position on screen
    glutCreateWindow("null"); // open the screen window
    glutDisplayFunc(checkerboard);     // register redraw function
    myInit();                   
    glutMainLoop();              // go into a perpetual loop
}


You should try

for (i = 0; i < 8 ; ++i) {
    for (j = 0; j < 8; ++j) {
        if((i + j)%2 == 0) // if i + j is even
            glColor3f( 0.4, 0.2, 0.6);
        else
            glColor3f( 0.2, 0.3, 0.4);
        glRecti(i*size, j*size, (i+1)*size, (j+1)*size);    // draw the rectangle
    }
}

You should think if you would rather want to let i and j go to 7 and not to 6, which would make a real checkerboard. Remember that the loop is repeated as long as i is lower than 7 (therefore it is done for i from 0 to 6). Therefore I changed the 7 to 8. If the 7 was really intended, then excuse me for taking this freedom.

Furthermore are the last two arguments not the size of the rectangle, but its opposite vertex, therfore the use of i+1 and j+1.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜