我正在尝试找出使用着色器选择信息的最佳方法。 窗口管理器缓冲区(窗口)用于输出渲染。在用户事件上,我应该选择渲染的几何体。使用gluPick很简单,但我只想使用着色器进行选择。
着色器的灵活性并不能帮助我找到正确的解决方案。我找到了以下解决方案:
似乎第二种解决方案是最好的,因为不会改变窗口缓冲区,并且可以定义指定几何名称的自定义方法。
有什么建议吗?
P.S:
因为在片段着色器中我声明了一个用于定义片段数据的vec4数组,我如何设置一个帧缓冲区,它只保存一个只有R组件的渲染缓冲区,以一个大小的整数内部格式存储?
是否可以将片段着色器输出变量与特定的附加渲染缓冲区链接起来?
答案 0 :(得分:2)
我不确定着色器在这里是否真的有任何帮助,除了可能作为某种形式的优化,您可以渲染到多个目标,因此能够在一次通过中生成拾取值和颜色值。
如果您正在使用光栅化进行拾取,那么您总是会遇到glReadPixels()调用或等效调用,并且您总是基本上将场景绘制到具有拾取值的某种缓冲区。
如果您真的想要创造性并偏离常态,可以尝试使用着色器与场景中的形状执行光线交叉。这需要一些专门的着色器开发,除非你做很多选择(也许是光线跟踪器?),否则很难看到它的好处。