我有很多简单对象的3D场景(可能数量很大),所以我认为使用光线追踪通过鼠标拾取对象不是很好。
我想做这样的事情:
-
将所有这些对象渲染到某个 OpenGL 屏幕外缓冲区中,使用指向当前对象的指针而不是他的颜色
-
使用真实颜色将相同的场景渲染到屏幕上
- 当用户选择具有 (x,y) 屏幕坐标的点时,我从屏幕外缓冲区(从相应位置)获取值并有一个指向对象的指针
可能吗?如果是 - 我可以选择哪种类型的缓冲区来"使用指针绘制"?
你可以分两次渲染。首先传递拾取所需的缓冲区或纹理数据,然后在第二次传递显示的数据。我对OGL不是很熟悉,但在DirectX中你可以这样做:http://www.two-kings.de/tutorials/dxgraphics/dxgraphics16.html。然后,您可以找到一种方法来分析纹理。请记住,您要渲染数据两次,这不一定会使渲染时间加倍(因为您不需要应用所有着色器和效果),因为它会增加很多。此外,每帧您基本上都会从 GPU 向 CPU 发送至少 2MB 的数据(如果您在 2K 显示器上每像素 1 字节),但如果屏幕上有超过 256 个对象,这可能会改变。
编辑:以下是对OGL执行相同操作的方法,尽管我无法验证教程是否正确:http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-14-render-to-texture/(如果您在Google上环顾四周,还有更多)