gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:37:36 25 4
gpt4 key购买 nike

我需要创建一个由用户输入决定的 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) 需要以某种方式进行操作,但我不确定。

最佳答案

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

至少,您可能需要调用 glOrtho() 来设置投影矩阵,然后调用 glTranslatef()glScalef() 设置您的模型 View 矩阵。 (或者您可以继续提供裁剪空间中的坐标,但这样做并没有真正的优势,所以您不妨选择自己的坐标系以使事情变得更容易。)

这将在任何 OpenGL 1.x 教程中介绍,也许您还没有读到那么远。查找短语“矩阵堆栈”、“投影矩阵”、“模型 View 矩阵”。

关于c - 使用 OpenGL/C 生成 N x N 网格以显示在窗口中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35403476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com