推 jhchou:以你的例子來說,不要用反投影,直接用點投影到螢幕上的 03/15 23:36
→ jhchou:座標跟滑鼠座標比就好了 03/15 23:37
→ Nestarneal:那如果我例子中的三角形,上面那點座標是(0, 1, 0), 03/16 09:58
→ Nestarneal:往左平移 12 單位後座標變成(-12, 1, 0) 03/16 09:58
→ Nestarneal:但是我擁有的座標是原先的(0, 1, 0)而不是(-12, 1, 0) 03/16 09:58
→ Nestarneal:那就沒辦法比較了耶... 03/16 09:59
→ Nestarneal:因為我舉的是比較精簡的例子,實際上我可能對網格檔做 03/16 09:59
→ Nestarneal:了許多的平移、旋轉,甚至是從不同的方向去看, 03/16 09:59
→ Nestarneal:如此一來我擁有的座標是最原始的, 03/16 09:59
→ Nestarneal:好像就沒辦法比較了耶... 03/16 09:59
→ linotwo:你的 vertex 難道沒有 index 嗎? 你是怎樣逐一比較的? 03/16 12:22
→ Nestarneal:我是用 OpenMesh 提供的 iterator 再利用 03/16 12:47
→ Nestarneal:glVertex3dv() 來繪製。 03/16 12:47
→ Nestarneal:將滑鼠點擊的座標轉為空間座標以後, 03/16 12:47
→ Nestarneal:我可以用 iterator 來讓該座標與每個 Vertex 比較, 03/16 12:48
→ Nestarneal:差值小於我設定的門檻值,則判定我點到該點。 03/16 12:48
→ Nestarneal:但是如果經過平移旋轉等等的改變, 03/16 12:48
→ Nestarneal:比方說可能原先在(0, 0, 0)的點跑去(47, 48, 49) 03/16 12:48
→ Nestarneal:而我滑鼠點擊後轉換的空間座標為(47, 48, 49), 03/16 12:48
→ Nestarneal:但因為我原本有的點是(0, 0, 0)所以會找不到。 03/16 12:48
→ Nestarneal:也就是如果沒有平移旋轉等等的改變, 03/16 12:48
→ Nestarneal:我可以把滑鼠座標轉換後的空間座標與我的 03/16 12:48
→ Nestarneal:每一個 Vertex 進行比較, 03/16 12:48
→ Nestarneal:但如果經過了改變,就沒辦法找到了 03/16 12:49
→ Nestarneal:目前大概是這樣的狀況... 03/16 12:49
→ linotwo:iterator 裡面不就包含了原本 vertex 的資訊了嗎? 03/16 13:29
→ Nestarneal:是的。但如果有裡頭有個點為(0, 0, 0),經過變化 03/16 13:47
→ Nestarneal:位置跑到(47, 48, 49)。當滑鼠點擊(47, 48, 49)的位置 03/16 13:47
→ Nestarneal:時,理應是點擊到該點。 03/16 13:47
→ Nestarneal:但由於 iterator 的資訊是變化前,也就是(0, 0, 0), 03/16 13:47
→ Nestarneal:因此在搜尋時會認為沒有點到該點, 03/16 13:47
→ Nestarneal:但事實上是有點到的... 03/16 13:47
→ linotwo:先轉換到同一個 space 再比對,你的問題應該就解決了。 03/16 15:12