2

我有很多简单对象的 3d 场景(可能数量很多),所以我认为使用光线跟踪通过鼠标拾取对象并不是一个好主意。

我想做这样的事情:

  1. 将所有这些对象渲染到一些opengl屏幕外缓冲区,使用指向当前对象的指针而不是他的颜色

  2. 使用真实颜色将相同的场景渲染到屏幕上

  3. 当用户选择具有(x,y)屏幕坐标的点时,我从屏幕外缓冲区(从相应位置)获取值并有一个指向对象的指针

可能吗?如果是的话——我可以为“用指针绘图”选择什么类型的缓冲区?

4

1 回答 1

0

我想你可以分两次渲染。首先到您需要拾取的缓冲区或纹理数据,然后在第二次传递显示的数据。我对 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/ (有如果你在谷歌上环顾四周,还有更多)

于 2013-10-19T01:18:34.823 回答