我有很多简单对象的 3d 场景(可能数量很多),所以我认为使用光线跟踪通过鼠标拾取对象并不是一个好主意。
我想做这样的事情:
将所有这些对象渲染到一些opengl屏幕外缓冲区,使用指向当前对象的指针而不是他的颜色
使用真实颜色将相同的场景渲染到屏幕上
- 当用户选择具有(x,y)屏幕坐标的点时,我从屏幕外缓冲区(从相应位置)获取值并有一个指向对象的指针
可能吗?如果是的话——我可以为“用指针绘图”选择什么类型的缓冲区?
我有很多简单对象的 3d 场景(可能数量很多),所以我认为使用光线跟踪通过鼠标拾取对象并不是一个好主意。
我想做这样的事情:
将所有这些对象渲染到一些opengl屏幕外缓冲区,使用指向当前对象的指针而不是他的颜色
使用真实颜色将相同的场景渲染到屏幕上
可能吗?如果是的话——我可以为“用指针绘图”选择什么类型的缓冲区?
我想你可以分两次渲染。首先到您需要拾取的缓冲区或纹理数据,然后在第二次传递显示的数据。我对 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/ (有如果你在谷歌上环顾四周,还有更多)