我试图找出选择使用着色器呈现信息的最佳方法。 窗口管理器缓冲区(窗口)用于输出渲染。在用户事件中,我应该选择渲染的几何图形。使用gluPick很容易,但我试图选择仅使用着色器。采用OpenGL着色语言
着色器的灵活性不会帮助我找到正确的解决方案。我找到了以下解决方案:
- 使用系统提供的缓冲区(实际上使用颜色)进行渲染。使用glScissor限制某个区域的渲染,并使用glReadPixels提取颜色,并使用几何标识符映射
- 使用单独的帧缓冲区对象进行渲染。渲染缓冲区格式需要定义。也许我可以用普通整数来放置名字吗?
- 使用帧缓冲区对象进行渲染,用于渲染和拾取。包含渲染名称的额外渲染缓冲区对象。
看来,第二种解决方案是最好的,因为不会改变窗口缓冲区,并且可以定义自定义方式来指定几何名称。
有什么建议吗?
PS:
由于在片段着色器我声明vec4的阵列用于限定所述片段数据,如何我可以设置一个帧缓冲保持一个呈现只具有R成分缓冲器,存储在尺寸整数内部格式?
是否有可能将片段着色器输出变量与特定的附加渲染缓冲区链接起来?
如果有人对研究GPU射线交集感兴趣,实际上有一篇关于它声称该方法为“2”的[论文](http://www.hindawi.com/journals/ijcgt/2009/730894/)到基于GPU的传统拾取速度的14倍“。我还没有尝试过。 – Loomchild 2012-12-12 14:05:48