【问题标题】:How to determine size of the drawable area of an OpenGL 3.3 window using GLFW如何使用 GLFW 确定 OpenGL 3.3 窗口的可绘制区域的大小
【发布时间】:2014-11-29 14:50:22
【问题描述】:

我正在尝试使用 GLFW 和 OpenGL 3.3 创建游戏/应用程序。我希望能够检测到与窗口侧面的碰撞,但似乎窗口的可绘制区域与使用glfwCreateWindow() 设置的窗口大小不同。

所以我的问题是,我如何获得该可绘制区域,即。窗口的大小减去边框?我宁愿不必使用 WinAPI 以使其更具跨平台性,而glfwGetWindowFrameSize() 在 GLFW 3.1 中,尚未完成。

编辑:我的问题使我看起来需要使用 GLFW 来完成此操作,但事实并非如此。我只是想指出我使用 GLFW 作为窗口/输入处理程序。

【问题讨论】:

  • 通过查看文档,glfwGetFramebufferSize() 听起来可能会给出您想要的结果?

标签: c++ glfw opengl-3


【解决方案1】:

你想要glfwGetFramebufferSize

glfwGetVideoMode 返回指定监视器的视频模式,而不是您的窗口大小。对于全屏窗口,它们恰好是相同的,但对于其他窗口,它们可能非常不同。

【讨论】:

    【解决方案2】:

    从外观上看,您不需要知道窗口的大小,我假设以像素为单位?如果你想对窗口的边界进行碰撞检测,你只需要检测你的顶点的 NDC,一旦它到达 x 或 y = (-1, 1) 那么你就会发生碰撞。尽管如此,如果您想获取 OpenGL 上下文的像素大小,请使用glfwGetVideoMode()

    【讨论】:

    • 谢谢,glfwGetVideoMode() 正是我要找的。我认为走 NDC 路线可能是一个更好的选择。目前我使用 NDC 的唯一时间是我将顶点传递到着色器时。
    • 经过一些实验,似乎 glfwGetVideoMode 实际上返回了错误的数字。正如@Colonel-Thirty-2 所提到的,它适用于全屏窗口,但没有别的。
    • GLFW 可以为您提供监视器的大小(通过glfwGetVideoMode)、窗口的大小(通过glfwGetWindowSize)和帧缓冲区的大小(glfwGetFramebufferSize)。正如您所发现的,当窗口全屏并且屏幕坐标等于像素时,监视器大小可以等于帧缓冲区大小。但这只是巧合。需要明确的是,glfwGetVideoMode 正在返回(可能是正确的)数字以用于其他目的,而不是获取以像素为单位的窗口客户区。
    猜你喜欢
    • 2018-02-03
    • 2018-06-07
    • 1970-01-01
    • 2012-07-31
    • 2020-07-28
    • 2019-06-11
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多