Шахматная доска с openGL glRecti - PullRequest
       0

Шахматная доска с openGL glRecti

3 голосов
/ 13 сентября 2011

У меня довольно простой вопрос. Нас просят сделать шахматную доску, используя glRecti в c ++, используя Visual Basic 2010. Вот что я имею до сих пор, и мне было интересно, если кто-нибудь может указать мне правильное направление.

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

1 Ответ

1 голос
/ 13 сентября 2011

Вы должны попробовать

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

Вы должны подумать, хотите ли вы позволить i и j перейти к 7, а не к 6, что сделало бы настоящую шахматную доску. Помните, что цикл повторяется до тех пор, пока i меньше 7 (поэтому это делается для i от 0 до 6). Поэтому я изменил 7 на 8. Если 7 действительно был задуман, то извините за то, что я взял эту свободу.

Кроме того, последние два аргумента - не размер прямоугольника, а его противоположная вершина, поэтому используются i+1 и j+1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...