繁体   English   中英

SDL2 OpenGL窗口缩小和更改鼠标坐标

[英]SDL2 OpenGL window shrinking and changing mouse coordinates

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

我的应用程序本机尺寸为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设置为与window匹配

    glViewport(0,0,1280,720);

  3. 我用原始尺寸1920x1080设置了glOrtho

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

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

我不确定我是否理解您的问题,但我认为这是问题所在:glOrtho()是opengl com而不是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的功能并进行实验。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM