2012-10-11 3 views
8

地平線レベルを維持するためにトラックボールコントロールを変更することはできますか?どのようにしてオブジェクトを回転させることができますか?three.jsトラックボールを使わないロールコントロール

axis.xとaxis.zを0に設定すると、ロールが停止しますが、オブジェクトを回転する機能も停止します。

軌道制御は、私が探しているものに近いですが、移動する能力はありません。

助けが必要ですか?

+5

'OrbitControls'は3つの.js r.58でパンニングをサポートするようになりました。 – WestLangley

+0

私はWestLangleyのコメントを回答に変換して賞金を得ることができると考えています。質問に答えるようですが、OrbitControlsにはトラックボールコントロールのすべての機能があります。地平線は水平に保たれます。 –

+0

私は彼のコメントを答えに変換する方法がわかっていませんが、これに同意します。 – gimg1

答えて

0

これは私にとってはうまくいくと思われます。 [編集]私はcamera.lookAt(someObj)を最初に使っています。

camera.rotation.z = Math.sin(camera.rotation.y)/3.5 
+0

それは私のために働いていません – Tyguy7

3

この質問を頼まれたので、それはしばらくしていますが、私は同じ問題に遭遇し、オンライン多くの議論を見つけることができませんでしたので、私は私が私の解決策を投稿しようと思いました。あなたがTrackballControlsを使用する必要がありますし、あなたが平らな地平線にしたい場合は

は、あなたは単に「this.rotateCamera」メソッド

this.objectの最後に次の行を追加してTrackballControls.jsライブラリを編集することができます。新しいTHREE.Vector3(0,1,0); カメラが(0,1,0)方向(y方向)に上方向にロックされます。次に、修正されたメソッド関数全体が読み込まれます:

this.rotateCamera = function() { 

var angle = Math.acos(_rotateStart.dot(_rotateEnd)/_rotateStart.length()/_rotateEnd.length()); 

if (angle) { 

    var axis = (new THREE.Vector3()).crossVectors(_rotateStart, _rotateEnd).normalize(); 
     quaternion = new THREE.Quaternion(); 

    angle *= _this.rotateSpeed; 

    quaternion.setFromAxisAngle(axis, -angle); 

    _eye.applyQuaternion(quaternion); 
    _this.object.up.applyQuaternion(quaternion); 

    _rotateEnd.applyQuaternion(quaternion); 

    if (_this.staticMoving) { 

     _rotateStart.copy(_rotateEnd); 

    } else { 

     quaternion.setFromAxisAngle(axis, angle * (_this.dynamicDampingFactor - 1.0)); 
     _rotateStart.applyQuaternion(quaternion); 

    } 

} 

// Lock the camera up direction 
this.object.up = new THREE.Vector3(0,1,0); 

}; 
+1

それが動作すると仮定して、新しいオブジェクトをインスタンス化しないでください。 'this.object.up.set(0、1、0);' – WestLangley

関連する問題