gpt4 book ai didi

c++ - 使用 QOpenGLTexture 和 QOpenGLFrameBufferObject 的多重纹理

转载 作者:搜寻专家 更新时间:2023-10-31 00:34:56 24 4
gpt4 key购买 nike

我正在尝试将以前的项目移植到新的 Qt5 OpenGL 类中。我想使用 FBO 渲染到纹理。之前的代码使用了多个纹理,我按需将其附加到 FBO。因此,我会附加一个特定的纹理对象,执行渲染,附加另一个纹理并执行不同的操作,并将输出渲染到新附加的纹理,等等。

我想知道如何使用 Qt5 OpenGL 类来执行此操作。例如,我不知道如何将某个 QOpenGLTexture 对象附加到 QOpenGLFrameBufferObject 以便我可以对其进行渲染。我可以看到有一个 texture() 方法和一个 takeTexture() 方法。但它们都只返回纹理 ID。另外,如何更改事件纹理单元?例如,我想在我的着色器程序中从两个纹理中采样。因此,我需要将两个纹理绑定(bind)到不同的纹理单元。

澄清一下,我在使用新 API 时遇到的主要问题是,我在 QOpenGLFrameBufferObject 中看不到任何返回 QOpenGLTexture 对象的方法。只有 toImage() 方法以及 texture()takeTexture() 方法。我想我可以使用从 toImage() 返回的 QImage 构造一个 QOpenGLTexture。但我不确定这是否有效。

至于 texture()takeTexture(),我看不出如何使用新类来使用它们的返回值。

最佳答案

是的,QOpenGLFrameBufferObject 早于 QOpenGLTexture,因此,它不使用或公开 QOpenGLTexture。它应该被添加,但实际上,QOpenGLFBO 应该只是重写以支持多个附件。

除此之外,手动使用 GL 调用还有什么问题?

GLuint textureId = fbo->texture();
glActiveTexture(GL_TEXTURE4);
glBindTexture(GL_TEXTURE_2D, textureId);

glActiveTexture(GL_TEXTURE9);
glBindTexture(GL_TEXTURE_3D, anotherTexture);

QOpenGLTexture *yetAnother = getTexture();
yetAnother->bind(2);

program->setUniformValue("samplerForTheFBOTexture", GL_TEXTURE4 - GL_TEXTURE0);
program->setUniformValue("my3dSampler", GL_TEXTURE9 - GL_TEXTURE0);
program->setUniformValue("anotherSampler", 2);
// or use layout (binding = ) in GLSL

等等

关于c++ - 使用 QOpenGLTexture 和 QOpenGLFrameBufferObject 的多重纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25071248/

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