国际象棋棋盘使用Recti

时间:2014-05-28 18:51:16

标签: c++ opengl

我正在制作一个程序来绘制一个代码为

的国际象棋棋盘
#include "glut.h"

void myDisplay(void);
void myInit(void);


int main(int argc, char ** argv)
{
    glutInit(&argc, argv);
    glutInitWindowSize(640, 480);
    glutInitWindowPosition(100, 150);
    glutCreateWindow("hello");
    glutDisplayFunc(myDisplay);
    myInit();
    glutMainLoop();

    return 0;
}

void myInit(void)
{
    glClearColor(1, 1, 1, 0);
    glColor3f(0, 0, 0);
    glPointSize(10);
    glutInitDisplayMode(GLUT_SINGLE | GL_RGB);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(640, 0, 480, 0);
}


void myDisplay(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    int counter = 0;
    for (GLint x = 0; x < 120; x += 15)
    {
        for (GLint y = 0; y < 120; y += 15)
        {
                counter++;
            if (counter & 1 ){ 
                glColor3f(.6, .6, .6);
            }
            else{
                glColor3f(.2, .2, .2);
            }
            glRecti(x, y, (x + 15), (y + 15));
        }//end of y     
    }//end of x 
    glFlush();
}

,输出

enter image description here

现在,如果我只是将相等(=)符号添加到myDisplay函数中的my(循环)中的条件,它可以正常工作但它还会再添加一行和一个colu。所以这是一个新的国际象棋无聊9X9

注意:我已经调试了程序,有趣的是它在调试模式下工作正常,因为它确实在条件之间切换......

1 个答案:

答案 0 :(得分:1)

它&#34;工作&#34;当然,当你使用<=时,从那时起,你每列绘制奇数个矩形。但是如果你绘制正确的数字8,你会得到偶数个内循环的调用,因此当你开始一个新的列时,计数器将始终是偶数。

这是因为counter & 1不是制作棋盘图案的正确条件。在您的情况下,最简单的方法是完全删除counter,只需使用((x+y)/15) & 1之类的内容来检查您所在的字段类型。