使用OpenGL / C生成N x N网格以在窗口中心显示

时间:2016-02-15 07:14:31

标签: c opengl

我需要创建一个由用户输入决定的NxN游戏板(即如果他们输入6,它将是一个6x6游戏板等),并创建一个类似于游戏的井字游戏。我刚刚开始尝试构建电路板,但我只能在右上角创建一个5 x 5的电路板,我想把它变成全窗口屏幕。这是迄今为止的一些代码:

    #include <stdio.h> //for text output
    #include <stdlib.h> //for atof() function
    #include <GL/glut.h> //GL Utility Toolkit


    //to hold for size and tokens for gameboard
    float grid, tokens; 
    void init(void);

    /*Function to build the board*/
    void buildGrid(float size) {
        glBegin(GL_LINES);
    for(int i = 0; i < size; i++) {
        glVertex2f(0.0, i/5.0f);
        glVertex2f(1.0, i/5.0f);
        glVertex2f(i/5.0f, 0.0);
        glVertex2f(i/5.0f, 1.0);
    }
    glEnd();
    }

    /*Callback function for display */
    void ourDisplay(void) {
    glClear(GL_COLOR_BUFFER_BIT);
    buildGrid(grid);
    glFlush();
    }

    int main(int argc, char* argv[]) {
    /*User arguments*/
    if (argc != 3) {
        printf("You are missing parts of the argument!");
        printf("\n Need game size and how many in a row to win by\n");
        exit(1);
    }

    /*Take arguments and convert to floats*/
    grid = atof(argv[1]);
    tokens = atof(argv[2]);


    /* Settupp OpenGl and Window */
    glutInit(&argc, argv);

    /* Set up display  */
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(800, 800);       // obvious
    glutInitWindowPosition(0, 0);       // obvious
    glutCreateWindow("Tic Tac Oh");     // window title

    /* Call the display callback handler */
    glutDisplayFunc(ourDisplay);

    init();

    /* Start the main loop that waits for events to happen and
       then to process them */
    glutMainLoop();
    }

我认为它与glVertex2f的x,y坐标有关,我尝试使用不同的坐标(底片),它只是将盒子移动到窗口的不同四分之一处。我也在想窗户的坐标(800 x 800)需要以某种方式进行操作,但我只是不确定。

1 个答案:

答案 0 :(得分:2)

您正在使用旧式固定功能管道,但您没有设置模型 - 视图 - 投影矩阵。这意味着您的OpenGL窗口使用“剪辑空间”坐标,从-1到+1。因此,屏幕的左下角是(-1,-1),右上角是(+ 1,+ 1)。

至少,您可能需要致电glOrtho()来设置投影矩阵,然后glTranslatef()glScalef()来设置您的模型视图矩阵。 (或者你可以继续在剪辑空间中提供坐标,但这样做并没有什么优势,所以你也可以选择自己的坐标系来让事情更轻松。)

这将在任何OpenGL 1.x教程中介绍,也许你还没读过那么久。寻找短语“矩阵堆栈”,“投影矩阵”,“模型视图矩阵”。