-2

如何在 qt opengl 中获取视口的大小(以像素为单位)并将其转换为 Vec2f?我的着色器需要它。

我知道 getWindowSize()。

4

3 回答 3

3

与在任何其他框架中获取视口大小的方式相同... GLint vp [4]; glGetIntegerv (GL_VIEWPORT, vp);请注意,这将返回一个包含 4 个参数的整数数组 - 与您将传递给glViewport (...).

好的软件将以这样的方式编写,您不需要向 OpenGL 状态机询问此信息,可能通过将视口大小保持为缓存的本地状态。但除此之外,这是了解视口大小的唯一方法。那是因为它与你的窗口大小无关,所以从 Qt 知道你的窗口大小根本不会帮助你解决这个问题。

于 2013-09-25T23:23:05.690 回答
1

只需使用QWidget::width()QWidget::height()退出 resizeGL 事件即可获取窗口的大小并从中确定您的视口尺寸。不要在处理程序中设置视口QGLWidget::resizeGL;您应该使用它来调整取决于屏幕尺寸且更改成本高昂的事物,例如用于后处理 FBO 的纹理。

于 2013-09-25T19:45:27.640 回答
0

您将需要重新实现 resizeGL 方法以使其正确。有关详细信息,请参阅文档示例。你会写这样的东西:

void resizeGL(int w, int h)
{
    ...
    Vec2f myVec2f((GLint)w, (GLint)h);
    ...
}

一旦你有了这样的宽度和高度,转换到 Vec2f 就足够简单了。基本上只是Vec2f(width, height)施工。

如果您需要在调整大小事件的上下文之外获取那些,您也可以使用QWidget::size(), 或QWidget::width(), 。QWidget::height()

于 2013-09-25T19:39:53.727 回答