2011-09-13 18 views
3

私はかなり簡単な質問があります。私たちは、visual basic 2010を使って、glRectiをC++で使ってチェッカーボードを作るように求められています。これまで私が持っていて、誰かが私を正しい方向に向けることができるかどうかは疑問でした。OpenGLを使ったチェッカーボードglRecti

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

jの 'for'ループを追加する必要があります。 – Dani

+0

ようこそStackOverflowへ、私はあなたが[FAQ](http://stackoverflow.com/faq)を読んだことを願っています。 –

答えて

1

あなたはあなたではなくijが本当のチェッカーボードを作ることになる、7ないし6に行かせたい場合は考えなければならない

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が7より小さい限り繰り返されることに注意してください(したがって、iは0から6までです)。したがって、私は7を8に変更しました.7が本当に意図されていたなら、この自由を取ってくれて本当にありがとうございます。

最後に、長方形のサイズではなく、反対側の頂点であるi+1j+1の2つの引数があります。

+0

美しく働いた、私はあなたの記事を読んですぐに間違っていたことを実現感謝:) – Ian

関連する問題