2010-11-11 23 views

回答

3

其他答案中提供的選擇和選擇教程不適用於此;其他glSelectBuffer和glRenderMode不是OpenGL ES的一部分。

如其他地方所述,基本上有兩種方法。您可以計算觸摸如何映射到場景中,並以數學方式測試您的對象。如果你的方格是平坦的,就好像你在2d中畫的那樣,那麼你可以很容易地實現這一點。

或者,您可以做一些基本上類似於選擇的事情,但可以根據OpenGL ES中提供的功能進行調整。例如,將場景清除爲黑色並以純藍色繪製您的方塊。使用glReadPixels獲取觸摸位置的顏色值。如果它是藍色的,那麼觸摸就在廣場上。這可能是一種更昂貴的測試方式,因爲它意味着場景的額外繪製,但這意味着您不必實施任何額外的數學或GL以外的其他代碼。

唯一需要記住的是OpenGL使用與處理像素相同的方式 - (0,0)是左下角,正值y上升,正值x左移。因此,無論您的觸摸座標相對於哪個座標軸,都需要在執行glReadPixels之前將它們轉換爲相對座標軸。

+0

看起來很困難。我將在屏幕上放置一些按鈕,並使用它們來移動OpenGL對象。 – VansFannel 2010-11-12 15:29:29

+0

@VansFannel它不是那麼困難,只需按照顏色選擇教程。一個做手指可以在iPhone上做什麼的按鈕是一個非常糟糕的主意 – rano 2010-11-12 18:37:24

+0

@rano:我爲Android做的不是iPhone。 – VansFannel 2010-11-15 10:50:09

0

如果您只有一個正方形,您可以檢查觸摸座標是否位於由正方形的四個頂點形成的空間內。在不平行於x軸的情況下,您應該使用投影矩陣來投影它的頂點。

更多一般有以下幾種方法:「挑」一個OpenGL模式:射線採摘顏色採摘是最常用的。一定要看看this doc

4

檢測觸摸可以使用光線拾取來實現。我遇到了同樣的問題,我在此頁面上使用了代碼:Android OpenGL ES ray picking。方法getViewRay()計算射線的方向。如果知道從[0,0,0]到ray [x,y,z]的方向,則很容易模擬光線投射並檢測與邊界對象的碰撞。