【发布时间】:2017-04-14 23:48:09
【问题描述】:
所以网上很多关于调整大小的问题都是关于保持正确的比率和避免拉伸等。据我了解,这可以通过使用gluOrtho2D 设置新的比率来完成。
但是,我不确定如何在调整大小时显示 MORE 和 LESS 世界。例如。你有一个可以沿 x 轴从 0 到 100 的平面。调整大小后,它现在应该(仍然是相同的大小)从 0 移动到 200。
编辑:所以我的意思是,我希望我的游戏中的所有东西都保持与以前一样的大小,但是如果你愿意的话,“天空”在调整大小时应该更大,我的飞机应该能够飞入那片天空(因为目前我有将其限制在屏幕内的代码)。
同样的,如果我的屏幕更小,那么飞机应该再也无法飞到不再存在的“天空”部分
最初,我使用以下几行设置我的程序,其中有关游戏的所有内容都存储在“游戏”中,并且 XSize、YSize 返回屏幕的大小。
void init(void) {
glClearColor(0.0, 0.0, 0.3, 0.0); /* set background color to a dark blue */
glColor3f(1.0, 1.0, 1.0); /* set drawing color to white */
glMatrixMode(GL_PROJECTION);
glEnable (GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glLoadIdentity();
gluOrtho2D(0, game.getXSize()*game.getAspect(), 0, game.getYSize() / game.getAspect()); /* defines world window */
}
int main(int argc, char *argv[]) {
game = GameManager(GAMENAME, 1000, 750, 60);
/*SETUP*/
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(game.getXSize(), game.getYSize());
glutCreateWindow(GAMENAME);
/*Other GLUT main function lines here */
glutReshapeFunc(resize);
}
但是,当我尝试在调整大小中设置 gluOrtho2D 时,程序会设置背景并停止绘制任何内容。
void resize(int w, int h){
game.setScreenSize(w,h);
glViewport(0,0,width,height)
const GLfloat aspectRatio = (GLfloat)game.getXSize() / (GLfloat)game.getYSize();
gluOrtho2D(0, game.getXSize()*game.getAspect(), 0, game.getYSize() / game.getAspect());
}
当然,我自己设法只使用 glViewport(0,0,w,h),但这与根本不做任何事情几乎相同(图形只是拉伸,而我正在使用的功能将对象移动到鼠标位置不再正常工作),因为如果我不创建 Reshape 函数,则默认调用 glViewport。
【问题讨论】:
-
我不确定您的具体意思。您提到或多或少地显示,但也提到在视口缩放的地方显示相同的内容。哪一个?能具体一点吗?
-
我会更新我的问题以更清楚,对不起
-
如果我理解正确的话。您希望根据视口的大小改变游戏中的距离。因此,不只是缩放视口以正确适合屏幕吗?听起来有点奇怪。最终目标是什么?
-
我只是想绘制一个在初始窗口设置中可能不完全可见的场景。当我调整窗口大小时,我希望能够看到更多(或更少)该场景,而无需拉伸或调整场景大小