2013-06-26 82 views
1

給出描述轉換(縮放+旋轉+轉換)的觸摸屏上的手勢,我想更改視圖和目標位置,以便手指保持粘貼到地圖上的相應點相機正在看。 這基本上是谷歌地圖的行爲。當相機(眼睛 - 目標)的方向矢量垂直於地圖時,這很容易。然而,我不知道如何解決這個角度變化的情況下,它不再正交。在透視圖上移動攝像機

只要方向視圖與平面正交看的旋轉是平凡的(您旋轉目標和眼睛關於從屏幕以及因此視矩陣的軸的未投影中心)。當正交性丟失時,這變得困難。事實上,在這種情況下,旋轉似乎變成了橢圓形,我迷失了定位新目標的位置。 有什麼想法?

+0

爲什麼downvote?這是一個有趣的問題。 –

+1

對於「手指粘在地圖上」的含義,你能更具體一些嗎? –

+1

我認爲他的意思是他正在繪製谷歌地圖的地圖。當用一根手指拖動時,由於相機已翻譯(螃蟹),因此該手指在地圖上的投影保持在同一位置。與兩個手指相同,因爲相機圍繞視圖軸旋轉並縮放。對於正交投影而言,這很簡單,但如果地圖傾斜,如何進行透視投影?這是正確的,OP?或者你還在使用正交投影,只旋轉地圖? –

回答

0

這裏的基本問題是,在透視投影下翻譯物體並不是preserve lengths。如果你有一個線段(A,B)在世界座標投射到屏幕(A「 B」)系統,而你是在WCS轉化爲(A + V,B + V),你將獲得積分(A'+ v1',B'+ v2'),並且通常v1'不等於v2'。相反,如果你(A 'B ')轉化爲屏幕上的(A' + V',B '+ V'),你將無法找到一個翻譯(A + V0,B + V1)被投影(A'+ v',B'+ v'),其中v0等於v1。

這意味着問題是不適當的。沒有獨特的解決方案。實際上,使用正交投影也沒有獨特的解決方案,因爲您始終可以在z方向上翻譯地圖。但這並不重要,因爲投影沿着該軸投影。因此,通過正交投影,您可以清楚地知道選擇哪一種解決方案:不會改變z的解決方案。透視投影,目前尚不清楚。這在很大程度上取決於您希望用戶如何導航。

我認爲處理翻譯手勢最直觀的方法是旋轉相機。因此,不要翻譯地圖,而要圍繞視圖原點旋轉地圖。有人可能會爭辯說,它是一個正交投影一樣:如果從透視投影逐漸轉換你的相機上的正投影,你會越走越移動視圖原點離開而縮小的視野,並且當你接近無窮大圍繞視圖原點的旋轉變成與觀察方向正交的平移。

但是,手指不會很粘。對於使用兩個手指的翻譯手勢,屏幕必須爲此彎曲。但由於平坦,屏幕邊緣附近的透視失真會變大(距離越來越失真)。雖然您可以沿視圖軸添加一些縮放或平移以保持手指的粘性,但這可能有點違反直覺。我認爲那是你提到的橢圓運動。所以我可能會劃傷粘性,與手指的中心C的轉換映射到周圍的視圖原點旋轉,手指的旋轉圍繞到C的觀點射線,和捏手勢旋轉縮放(FOV的變化) 。

無論是旋轉相機的原點是一個明智的選擇,你希望用戶如何能夠導航我不能說。可能不會。