选择颜色的盒子

时间:2014-09-03 08:30:17

标签: opengl

我已经阅读了很多关于对象拾取的信息。现在我决定采用简单的颜色选择技术。我知道如何实现单个对象拾取(绘制一个帧并使用glReadPixel测试像素颜色)。

现在我无法弄清楚用盒子挑选应该如何工作。想要记住按下鼠标的位置和释放位置的坐标以及从盒子和文本像素颜色中取出每个坐标之后看起来有意义的想法。但是,我应该如何处理情况,例如,我的盒子里面有一百万个尺寸为20x20的盒子内的物体?

是否会读取所有对象ID,或者可能会遗漏某些对象?我一切都应该没问题,是否有人能为盒子选择提供安静的代码?

1 个答案:

答案 0 :(得分:0)

采摘的颜色编码对象有一堆缺点。猜猜你正面对其中一个。

  • 如果使用深度缓冲区(为对象提供z深度),则只能访问距离视图最近的对象。它下面的任何东西(和相同的深度)都会被掩盖。永远不能使用ReadPixels选择它。
  • 如果您的对象的投影小于像素,那么从技术上讲,它不可见并且有效读取像素将永远无法拾取它。
  • 半透明是一个与读取像素一起使用的坏主意(IMO),因为它会混合颜色并使您难以找到正确的对象。这也取决于您的颜色编码技术。

理想情况下,在一个20 * 20的盒子中,你应该能够选择不超过400个物体,而且考虑到每个物体只有一个像素。

如果你拥有数百万个物体,那么光线跟踪或Ray-Box交叉是一种更精确的方法。但是,它肯定比Color编码更复杂。除非你做出更简单的近似,否则复杂对象会变得更复杂。

或者,您可以使用同样准确且易于使用的选择缓冲区,因为它本身由OpenGL支持。它确实有一个开销和额外的绘制调用。但你真的不能错过这个。