2013-08-27 52 views
2

我有建立在OpenGL中的地圖對象。這張地圖包含街道,高速公路,邊界。我想要的是知道用戶觸摸什麼對象,就像多邊形或折線或簡單的線。我如何從OpenGL中檢測這些對象?OpenGL的檢測用戶觸摸

+0

更多的信息是必要的。當你說「用戶觸摸」時,你的意思是點擊或碰撞?一般來說,您不會使用OpenGL檢測這兩種情況(除非您使用「選擇緩衝區」來選擇)。 –

+0

我的意思是點擊街道,然後我想知道天氣選定的項目是多邊形,多段線或線? –

+0

有什麼辦法通過opengl檢測這些對象嗎? –

回答

2

在OpenGL ES中,沒有selection buffer,因此沒有特別設計的功能可以讓您在特定點上識別屏幕上的對象。

你有兩個選擇:

  1. UnProject屏幕空間位置(X,Y)成爲世界空間中的位置,並通過這一點(通常測試針對射線散粒相交的所有對象表現最好的方法)。

  2. 呈現在使用一種特殊的顏色,唯一識別場景的一切,然後在屏幕空間位置(x,y)的讀取像素的顏色。

選項2慢,因爲它需要你等待GPU完成渲染,但它具有處理非常薄的對象(如線)的優勢,更準確。實施起來也很簡單。

查看選項2瞭解更多詳情以下兩個鏈接:

+0

感謝您的回覆。我忘了說所有的對象有不同的顏色 –

+0

@MuneemHabib:這很好,你只打算用它們標識唯一每當用戶點擊屏幕上的色彩渲染的對象。您應該立即重新繪製場景(在執行'glReadPixels(...)'後)以正常方式隱藏僞色。 –

+0

由於內存帶寬不足,額外的渲染過程在移動設備上非常痛苦。如果可能的話,應該優先選擇未投影。 –