SDL2 OpenGL窗口收缩和改变鼠标坐标

时间:2014-07-26 12:26:18

标签: c++ opengl

将我的应用程序缩小到窗口大小后,鼠标坐标不会发生变化。图形工作正常,只是鼠标坐标有问题。

我的应用程序原生大小为1920x1080。但我不想将应用缩小到1280x720。

以下是我现在正在做的事情:

  1. 使用1280x720 w / h创建窗口

    appWindow = SDL_CreateWindow(GAME_TITLE, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 1280, 720, SDL_WINDOW_OPENGL | SDL_WINDOW_BORDERLESS | SDL_WINDOWPOS_CENTERED);

  2. 我设置glViewport以匹配窗口

    glViewport(0,0,1280,720);

  3. 我使用原生大小1920x1080

    制作了设置glOrtho

    glOrtho(0, 1920, 1080, 0, -1, 1);

  4. 就像我已经说过的那样,通过这样做,图形会缩放新的窗口大小,但鼠标坐标不会改变,我需要知道如何更改它们。

1 个答案:

答案 0 :(得分:0)

我不确定我理解你的问题,但我认为这是问题:glOrtho()是opengl命令而不是sdl,所以它只影响opengl图形。在您的情况下,鼠标和窗口由SDL控制。

我不明白你要做的是说"我的应用程序本机大小是1920x1080。但我不想将应用缩小到1280x720。"如果要调整窗口大小,请使用SDL_SetWindowSize。然后用glViewport和glOrtho调整opengl视口和投影,这样你的opengl视图和sdl窗口大小是同步的。

编辑1:如果您想现在渲染,通过使用比Windows更大的视图,那么您需要自己计算鼠标位置。 sdl为您提供相对于窗口大小的鼠标而不是opengl视图和投影。如果你只是缩放视图,数学应该非常简单。

在您的情况下,

编辑2: glOrtho(0,1920,1080,0,-1,1)将1920x1080图像投影到glViewport(0,0,1280,720)视图。如果我没有弄错的话,它会缩小。因此,您需要将鼠标位置缩小到相对于比例:

未经测试的代码:

mouseX= 1920.0/1280.0 * winMouse.x
mouseY= 1080.0/720.0 * winMouse.y;

我试用了很多,所以试着去了解一下opengl的作用和实验。