如何以像素为单位获取视口大小并将其转换为qt opengl中的Vec2f?我的着色器需要它。
我知道getWindowSize()。
答案 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方法才能使其正确。有关详细信息,请参阅documentation和example。你会写这样的东西:
void resizeGL(int w, int h)
{
...
Vec2f myVec2f((GLint)w, (GLint)h);
...
}
一旦你有宽度和高度,转换到Vec2f就足够了。基本上只是Vec2f(width, height)
构建。
如果您需要获取调整大小事件的上下文之外的内容,您还可以使用QWidget::size()
,QWidget::width()
和QWidget::height()
。