2010-08-08 40 views

回答

0

這被稱爲「3D拾取」。您必須將屏幕座標轉換爲世界座標。從那裏,做一個射線/碰撞物體(包圍盒?)相交測試。如果它們相交,那就是用戶點擊的地方。

爲了解決深度排序問題,您必須做更多的工作,比如找到每個對象的第一次交叉點,然後選擇具有最低(正)時間的交點。

如果你谷歌的「3D採摘」,你可能會發現你在找什麼。

這裏是一個教程: http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=32

注意,這不是針對邊界對象的任何形狀,無論是邊框,多邊形,曲線等,你一定要弄清楚數學用於您想要支持的每種類型對象的相交測試。

編輯:

之前,我掛它,我沒看過該教程,我只是想出訥河是所有時尚的年輕人(當然十年前......)學習的OpenGL。

下面是OpenGL的常見問題解答一些關於採摘:

http://www.opengl.org/resources/faq/technical/selection.htm

+0

NeHe教程是一個不好的例子,它不能在OpenGL ES中遠程工作。 – 2010-08-09 14:39:42

+0

@Matias Valdenegro:最終,3D拾取算法本身就是3D API不可知論者。我同意我鏈接的教程太多了,並且我沒有仔細閱讀它,看看他是否使用API​​來執行某些拾取計算。提供鏈接的目的是表明至少有一個3D拾取教程。 NEHE經常爲新的OpenGL程序員提供簡單的教程,無論它們在所有方面是否正確。如果你有更好的,請提供一個鏈接。 – 2010-08-09 18:55:20

0

waldecir,尋找一個raypick功能。它是通過點擊的像素(實際上,通過相機平面上代表3D世界中「屏幕的玻璃表面」的像素的平移位置)從場景的相機中心發送光線的名稱,並返回最前面的多邊形ray與一些信息一起點擊。通常在多邊形的表面軸線內的座標,例如, UV或紋理座標。通過檢查座標,您可以確定用戶點擊了哪個平方。

光線可以從任何位置和任何方向發送,因此您可能需要獲取相機位置和其平面中心,但文檔應該能夠幫助您。