- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试将以前的项目移植到新的 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/
我正在尝试调整 QOpenGLTextures 的大小以保留指定的属性。我知道在可能的情况下使用不可变存储这一事实。所以我必须破坏并重新创建纹理。但似乎 QOpenGLTexture 在销毁后失去了它
我一直在使用旧的 Qt OpenGl 方法,但现在是时候切换到较新的方法了。 作为位图 FIBITMAP* 正确初始化 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8,
我正在使用 Qt 5.5 OpenGL 包装类。特别是试图让 QOpenGLTexture 工作。我在这里创建一个 1x1 2D 白色纹理用于 mask 目的。这有效: void Renderer::
我正在尝试将以前的项目移植到新的 Qt5 OpenGL 类中。我想使用 FBO 渲染到纹理。之前的代码使用了多个纹理,我按需将其附加到 FBO。因此,我会附加一个特定的纹理对象,执行渲染,附加另一个纹
一段时间以来,我一直在 QOpenGLTexture 的纹理中使用 32 位浮点精度的 RGB 图像。我没有遇到任何问题。最初,这些图像具有无符号短数据类型,我想保留此数据类型以将数据发送到 open
我是一名优秀的程序员,十分优秀!