inf*_*000 2 c++ opengl qt qt5 qtopengl
我正在尝试将以前的项目移植到新的Qt5 OpenGL类.我想使用FBO渲染到纹理.之前的代码使用了多个纹理,我按需附加到FBO.因此,我会附加某个纹理对象,执行渲染,附加另一个纹理并执行不同的操作,并将输出渲染到新附加的纹理,依此类推.
我想知道如何使用Qt5 OpenGL类进行此操作.例如,我无法弄清楚如何将某个QOpenGLTexture对象附加到一个对象,QOpenGLFrameBufferObject以便我可以渲染它.我可以看到有一种texture()方法和takeTexture()方法.但他们都只返回纹理ID.另外,如何更改活动纹理单元?例如,我想在我的着色器程序中从两个纹理中进行采样.所以,我需要将两个纹理绑定到不同的纹理单元.
为了澄清,我对新API的主要问题是我没有看到任何方法QOpenGLFrameBufferObject会返回一个QOpenGLTexture对象.只有toImage()方法texture()和takeTexture()方法.我想我可以QOpenGLTexture使用QImage返回来构造一个toImage().但我不确定这是否有效.
至于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
等等
| 归档时间: | 
 | 
| 查看次数: | 3657 次 | 
| 最近记录: |