【发布时间】:2018-11-30 13:12:37
【问题描述】:
与my other question 相关,我正在尝试渲染分割蒙版以启用对象拾取。但我无法达到预期的效果。
选项 1 根本不起作用。我无法检索颜色附件 1 的内容,或者检查它是否存在(我只使用原生 OpenGL 调用创建了附件)。
使用this 帖子,我能够通过创建带有第二个颜色附件的自定义帧缓冲区来重现green.png 和red.png 图像,然后绑定并绘制到(全部在paintGL() 中)。
不知何故,我不得不使用这个人的帧缓冲区创建代码,因为当我自己创建帧缓冲区时,总是有一个警告说 toImage called for missing color attachment,尽管我附加了颜色附件并且在帧缓冲区上调用 textures() 返回了两个对象.然后我尝试在
GLfloat red[4] = { 1.0f, 0.0f, 0.0f, 1.0f };
f->glClearBufferfv(GL_COLOR, 0, red);
GLfloat green[4] = { 0.0f, 1.0f, 0.0f, 1.0f };
f->glClearBufferfv(GL_COLOR, 1, green);
但这仍然导致红色和绿色图像。但是当使用正常的默认帧缓冲区时,代码渲染得很好。我将着色器调整为(用于测试目的的简短版本):
void main() {
gl_FragData[0] = vec4(1.0, 1.0, 1.0, 1.0);
gl_FragData[1] = vec4(0.0, 0.0, 0.0, 1.0);
}
由于我能够生成红色和绿色图像,我假设必须有一种方法可以使用此自定义帧缓冲区检索片段数据。我现在拥有的解决方案是程序的完整(!)副本和另一个专用的片段着色器,其唯一目的是渲染分段,并第二次执行所有 OpenGL 绘制调用。你可以猜到,这是一个有点丑陋的解决方案,虽然风景不是那么大,我的电脑可以轻松处理。有人有想法/链接吗?
【问题讨论】:
标签: qt opengl framebuffer rendertarget