如何在 qt opengl 中获取视口的大小(以像素为单位)并将其转换为 Vec2f?我的着色器需要它。
我知道 getWindowSize()。
与在任何其他框架中获取视口大小的方式相同... GLint vp [4]; glGetIntegerv (GL_VIEWPORT, vp);
请注意,这将返回一个包含 4 个参数的整数数组 - 与您将传递给glViewport (...)
.
好的软件将以这样的方式编写,您不需要向 OpenGL 状态机询问此信息,可能通过将视口大小保持为缓存的本地状态。但除此之外,这是了解视口大小的唯一方法。那是因为它与你的窗口大小无关,所以从 Qt 知道你的窗口大小根本不会帮助你解决这个问题。
只需使用QWidget::width()
和QWidget::height()
退出 resizeGL 事件即可获取窗口的大小并从中确定您的视口尺寸。不要在处理程序中设置视口QGLWidget::resizeGL
;您应该使用它来调整取决于屏幕尺寸且更改成本高昂的事物,例如用于后处理 FBO 的纹理。