我正在创建一个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();
}
这是目前正在发生的事情的图片:
答案 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);