gpt4 book ai didi

qt - 使用原始 OpenGL 调用绘制 Qml 项的问题

转载 作者:行者123 更新时间:2023-12-04 02:26:16 32 4
gpt4 key购买 nike

我想使用原始 OpenGL 调用在 QtQuick 场景中绘制单个项目。我决定采用 this question 中建议的方法.

我创建了一个源自 QQuickFramebufferObject 的 Qt Quick 项目并将其作为 Renderer 暴露给 QML :(代码基于Qt示例:Scene Graph - Rendering FBOs)

class FboInSGRenderer : public QQuickFramebufferObject {
Q_OBJECT
public:
Renderer *createRenderer() const;
};

源文件:
class LogoInFboRenderer : public QQuickFramebufferObject::Renderer {
public:
LogoInFboRenderer() { }

void render() {
int width = 1, height = 1;
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glColor4f(0.0, 1.0, 0.0, 0.8);
glBegin(GL_QUADS);
glVertex2f(0, 0);
glVertex2f(width, 0);
glVertex2f(width, height);
glVertex2f(0, height);
glEnd();

glLineWidth(2.5);
glColor4f(0.0, 0.0, 0.0, 1.0);
glBegin(GL_LINES);
glVertex2f(0, 0);
glVertex2f(width, height);
glVertex2f(width, 0);
glVertex2f(0, height);
glEnd();

update();
}

QOpenGLFramebufferObject *createFramebufferObject(const QSize &size) {
QOpenGLFramebufferObjectFormat format;
format.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil);
format.setSamples(4);
return new QOpenGLFramebufferObject(size, format);
}
};

QQuickFramebufferObject::Renderer *FboInSGRenderer::createRenderer() const {
return new LogoInFboRenderer();
}

在 Qml 中,我按如下方式使用它:
import QtQuick 2.4
import SceneGraphRendering 1.0

Rectangle {
width: 400
height: 400
color: "purple"
Renderer {
id: renderer
anchors.fill: parent
}
}

我期待看到渲染的“X”会填满整个场景,但我得到的结果如下:

enter image description here

其他实验似乎证实了绘制的形状总是它的大小(宽度/高度)除以 2。

我还检查了 size createFramebufferObject 中的参数有正确的值(value)。

查看文档让我找到了属性(property) textureFollowsItemSize QQuickFramebufferObject class 但默认设置为 true .

我做错了什么还是应该将这种行为视为 Qt 错误?

最佳答案

绘制的矩形是您预期大小的一半,因为默认坐标范围是 [-1, 1],而不是您的代码假定的 [0, 1]。如果要使用 [0, 1] 比例,则应适当设置投影矩阵:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);

关于qt - 使用原始 OpenGL 调用绘制 Qml 项的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28070778/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com