在调整窗口大小时使用GLUT调整游戏板的大小

时间:2016-12-09 15:11:00

标签: c++ opengl glut

我正在创建一个connect 4游戏,我已经实现了所有的c ++代码,但现在我正在创建图形。

当窗口调整大小时,我无法弄清楚如何重新设置游戏板。这是我目前的代码:

void reshape(int w, int h){
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
width = w;
height = h;

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, width, 0, height, -1.0, 1.0);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

这是目前正在发生的事情的图片:

enter image description here

1 个答案:

答案 0 :(得分:0)

如果您的游戏为gameWidth x gameHeight,则您希望找到填充窗口的边距。因此,首先将游戏纵横比与窗口纵横比进行比较,以查看将边距添加到哪一边:

double windowAspect = (double)w / h;
double gameAspect = (double)gameWidth / gameHeight;

if(gameAspect > windowAspect)
{
    //game is wider than the window, apply margins on top and bottom
    //...
}
else
{
    //window is wider than the game, apply margins left and right
    //...
}

我只会解释第一个案例。第二种情况类似。

在第一种情况下,左边和右边都没有边距。所以最终投影宽度应该等于游戏宽度。然后,顶部和底部边距由屏幕未被游戏填充的部分定义:

double windowHeightInGameSpace = gameWidth / windowAspect;
double margin = (windowHeightInGameSpace - gameHeight) / 2;
glOrtho(0, gameWidth, -margin, gameHeight + margin, -1.0, 1.0);