2012-07-29 14 views
1

我試過失敗(因爲我的可憐3D幾何理解和不幸缺乏時間挖掘)來構建three.js的GoogleEarth類控件。也許有人可以幫助我,或者可能已經擁有了它。無論如何,我認爲這將是three.js庫的一個很好的補充。通過按住Shift鍵 Three.js的GoogleEarth樣控件

  • 潘按下鼠標左鍵

    1. 放大與鼠標滾輪鼠標光標
    2. 繞場景:

      這是我想建立的特定功能。

    3. 作爲獎勵:在上面的1和2操作中顯示一個小目標圖標。

    我對1有很多麻煩,並沒有嘗試過2.平移很容易(有很多例子)。

    現在我無法放大場景,因此它在光標下保持固定(所以我可以指向屏幕的右上角,放大並仍然可以看到我在光標下面有什麼)。

    我在此先感謝,亞歷克斯

  • +0

    如果沒有攜帶凸輪的物理實體,您將無法獲得GE的平穩運動。 – noiv 2012-07-30 20:59:42

    回答

    2

    我實現了在過去的生活類似的東西。我在這裏假設你正在與一架平面相互作用;將這些技術轉換爲與球體相切的平面作爲練習留給讀者。 ;)

    放大與鼠標滾輪鼠標光標

    要做到這一點,你要投下光線進入現場,並記下它擊中。然後,您需要將攝像機的視點轉換爲該交點。爲了感覺「正確」,您需要某種比例縮放而不是固定步長 - 例如,每個縮放步驟將當前視點與目標的距離縮短20%,而不是僅移動20個單位。這會在相機接近時自動減慢速度。

    現場周圍的旋轉通過按住Shift鍵

    一個你按住shift鍵,你會想左,右鼠標移動到軌道有關觀點。要做到這一點,你需要偏離垂直於你的交點的軸。您將投射一束光線進入場景(一旦按下移位),記下相交點,然後旋轉相機的視點。請注意,您還需要重新調整攝像機的方向以便在旋轉時不斷指向該交點,或者可能需要使眼睛方向旋轉以保持與從眼點到交點軸的矢量保持恆定角度。

    按下鼠標左鍵即可平移。

    你只需要得到眼睛右眼矢量,並注視矢量,並在適當的方向移動(將鼠標dx/dy與規範化眼睛右/眼睛向上相乘,然後乘以時間步長以進行與幀率無關的移動)。

    作爲獎勵:在上面的1和2操作中顯示一個小目標圖標。

    在場景中的交叉點處添加一個小對象。一旦退出某個模式,請移除該對象。

    1

    關於第一個問題,你可以在鼠標滾輪

    mousewheel = function (event) { 
    event.preventDefault(); 
    var factor = 15; 
    var mX = (event.clientX/jQuery(THREE_STUFF.container).width()) * 2 - 1; 
    var mY = -(event.clientY/jQuery(THREE_STUFF.container).height()) * 2 + 1; 
    var vector = new THREE.Vector3(mX, mY, 0.1); 
    vector.unproject(camera); 
    vector.sub(camera.position); 
    if (event.deltaY < 0) { 
    camera.position.addVectors(camera.position, vector.setLength(factor));      trackBallControls.target.addVectors(trackBallControls.target, vector.setLength(factor)); 
    } else { 
    camera.position.subVectors(camera.position, vector.setLength(factor));      trackBallControls.target.subVectors(trackBallControls.target, vector.setLength(factor)); 
    } 
    } 
    

    使用這個節目,我希望這將幫助你確定。