QOpenGLWidget 调整大小导致不正确的视口大小
QOpenGLWidget resize results in incorrect viewport size
我的 QOpenGLWidget
调整大小功能有一些问题。显然,我的目标是使用正确数量的像素和以我 window 的实际中心为中心的场景的新视口。但是这两件事不知何故。
这是一些图片:
第一个:
Y 缩放:
X 缩放:
结果经过像素化和翻译。对我来说,看起来 GL 视口具有正确数量的像素,但被缩放到顶部和右侧(如果 (0,0) 被定义为左下角)。
这是我的代码:
void GLWidget::initializeGL() {
QOpenGLFunctions::initializeOpenGLFunctions();
glClearColor(0.7f, 0.75f, 0.8f, 1.0f);
glEnable(GL_MULTISAMPLE);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}
void GLWidget::resizeGL(int w, int h) {
qreal aspect = qreal(w) / qreal(h ? h : 1);
const qreal zNear = 3, zFar = 7, fov = 3.14/6;
//I will leave this at it is. This cannot cause the viewport translation
mGraphics->setProjectionPers(fov, aspect, zNear, zFar);
}
void GLWidget::paintGL() {
glClear(GL_COLOR_BUFFER_BIT);
glClear(GL_DEPTH_BUFFER_BIT);
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
//actual Drawing
//...
}
使用正确的值调用了 resizeGL。当我 运行 这段代码时,我有一个像素化和翻译的图像我做错了什么?
无论出于何种原因,这都在我的 QOpenGLWidget 后代的头文件中:
void resizeEvent(QResizeEvent* ev) {
resizeGL(width(), height());
}
这几乎跳过了 QOpenGLWidget 的所有调整大小逻辑 class。
我的 QOpenGLWidget
调整大小功能有一些问题。显然,我的目标是使用正确数量的像素和以我 window 的实际中心为中心的场景的新视口。但是这两件事不知何故。
这是一些图片:
第一个:
Y 缩放:
X 缩放:
结果经过像素化和翻译。对我来说,看起来 GL 视口具有正确数量的像素,但被缩放到顶部和右侧(如果 (0,0) 被定义为左下角)。
这是我的代码:
void GLWidget::initializeGL() {
QOpenGLFunctions::initializeOpenGLFunctions();
glClearColor(0.7f, 0.75f, 0.8f, 1.0f);
glEnable(GL_MULTISAMPLE);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}
void GLWidget::resizeGL(int w, int h) {
qreal aspect = qreal(w) / qreal(h ? h : 1);
const qreal zNear = 3, zFar = 7, fov = 3.14/6;
//I will leave this at it is. This cannot cause the viewport translation
mGraphics->setProjectionPers(fov, aspect, zNear, zFar);
}
void GLWidget::paintGL() {
glClear(GL_COLOR_BUFFER_BIT);
glClear(GL_DEPTH_BUFFER_BIT);
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
//actual Drawing
//...
}
使用正确的值调用了 resizeGL。当我 运行 这段代码时,我有一个像素化和翻译的图像我做错了什么?
无论出于何种原因,这都在我的 QOpenGLWidget 后代的头文件中:
void resizeEvent(QResizeEvent* ev) {
resizeGL(width(), height());
}
这几乎跳过了 QOpenGLWidget 的所有调整大小逻辑 class。