2014-09-03 282 views
0

我已經閱讀了很多關於對象採摘的信息。現在,我決定停止使用簡單的顏色採摘技術。我知道如何實現單個對象拾取(使用glReadPixel繪製一個框架並測試像素顏色)。顏色選擇框選擇

現在我不明白如何使用框採摘應該工作。想法記住鼠標按下的位置和釋放的位置,並且在從框和文本像素顏色獲取每個座標後,看起來有意義。但是,我應該如何在情況下進行操作,例如,我的箱子裏有一百萬個尺寸爲20x20的箱子內的物品?

是否會讀取所有對象id,或者可能會丟失一些對象?我一切都應該沒問題,有人能提供代碼選擇的工作和平嗎?

+0

如果只是盒子,你可能比繪製一個完整的新框架更好的分析方法。也許使用加速度數據結構,例如KD樹。 – 2014-09-03 11:05:49

+0

@尼科Schertler你能提供任何參考? – frankie 2014-09-03 12:12:16

+1

對於什麼? [雷箱交叉口(http://www.cs.utah.edu/~awilliam/box/box.pdf)? – 2014-09-04 07:41:41

回答

0

挑選的顏色編碼對象有一堆缺點。猜猜你正面臨着其中之一。

  • 如果您使用的是深度緩衝區(爲對象提供z深度),則只能觸及最接近視圖的對象。它下面的任何東西(以及相同的深度)都將被掩蓋。它不能使用ReadPixels拾取。
  • 如果您的物體的投影小於一個像素,那麼從技術上講,其不可見和有效讀取的像素將永遠無法拾取它。
  • 半透明是一個壞主意(IMO)與讀取像素一起使用,因爲它會混合顏色並使您很難找到正確的對象。這也取決於你的顏色編碼技術。

理想情況下,在一個20 * 20的盒子裏,你應該能夠選擇不超過400個物體,並且也要考慮到每個物體只能得到一個像素。

如果您擁有數百萬個物體,則Ray Trace或Ray-Box相交是一種更準確的方法。但是,它的確比彩色編碼複雜。除非您進行更簡單的近似,否則複雜對象會變得更加複雜。

或者,您可以使用選擇緩衝區,因爲它本身受OpenGL支持,所以使用選擇緩衝區的準確性和使用都相當簡單。它有一個額外的繪製調用的開銷。但你真的不能在這個問題上出錯。

+0

使用選擇模式的一個主要缺點是它已被棄用,並且在OpenGL Core Profile中不再受到支持。 – 2014-09-05 05:31:16