2016-02-25 77 views
0

我在opengl中創建了棋盤/棋盤,它有100個框。從邏輯上講,我代表董事會採用2D陣列(10乘10)。現在我想讓用戶點擊opengl窗口中的任何地方,我可以確定數組中的哪個索引,以便我可以進行一些處理。我怎麼能做到這一點?標準化的設備座標映射到2D數組索引

我正在使用LWJGL一個用於opengl的java包裝。我知道我必須獲得鼠標座標,並且我知道它們是以歸一化設備座標(範圍從1到-1)返回的。我如何將NDC映射到索引?我一直在尋找,但沒有找到太多。

我知道每個盒子的NDC範圍。那是因爲我通過給出頂點來繪製它們,所以我知道每個盒子在NDC中的開始和結束位置。但是以鍵值對的形式輸入範圍及其各自的索引會太麻煩。

目前我正在嘗試通過基本算術創建公式,以便它轉換NDC並給出索引。這可能嗎?或者還有其他可行的方法嗎?

對於那些正在考慮如何製作棋盤的人,我畫了-1到1的垂直線,距離爲0.2。類似的情況是水平的。

回答

0

如果您在屏幕空間中直接繪製這是很容易從NDC COORDS計算盒指數:

index.x = (int) ((ndc.x/2.0f + 0.5f) * boardSize.x) 
index.y = (int) ((ndc.y/2.0f + 0.5f) * boardSize.y) 
if (index.x == boardSize.x) // in case ndc.x was exactly 1 
    --index.x; 
if (index.y == boardSize.y) // in case ndc.y was exactly 1 
    --index.y; 
+0

該死的男人,這似乎工作..沒有編寫它尚未剛纔檢查的公式。你能告訴我他們是如何派生的?我一直想自己推導出這些配方奶粉 –

+0

只需一步一步思考。除以兩個等級,ndc在[-0.5,0.5]的範圍內。然後你加0.5,現在在[0,1]。剩下要做的就是用所需的大小乘以,並將分形部分轉換爲一個整數,然後將其分割。 – hailtothegrail