如何在qt中获取视口大小

时间:2013-09-25 19:18:56

标签: qt opengl

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

我知道getWindowSize()。

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

只需使用resizeGL事件中的QWidget::width()QWidget::height()来获取窗口的大小,并从中确定视口尺寸。 不要QGLWidget::resizeGL处理程序中设置视口;你应该使用它来调整依赖于屏幕尺寸和更改成本的东西,比如用于后期处理FBO的纹理。

答案 2 :(得分:0)

您需要重新实现resizeGL方法才能使其正确。有关详细信息,请参阅documentationexample。你会写这样的东西:

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

一旦你有宽度和高度,转换到Vec2f就足够了。基本上只是Vec2f(width, height)构建。

如果您需要获取调整大小事件的上下文之外的内容,您还可以使用QWidget::size()QWidget::width()QWidget::height()