私が達成しようとしているのは、2つの制御モード、つまりフリーの「フライング」モードとオブジェクト中心のモード(トラックボール)を用意し、ボタンを押すだけでそれらをシームレスに切り替えることです。
私は最初にTrackBallControlsとFlyControlsを試しました。これら2つの問題は、TrackballControlsがオイラー角に基づいているのに対し、FlyControlsはQuartenionsに基づいていることです。次のようにして、camera.rotationベクトルをクォータニオンに変換してみました。
quaternion.setFromEuler( target ); //where target, a Vector3 that contains degrees
そして、手動で位置を設定し(同じ位置オブジェクトを使用しているため)、それが機能しているように見えながら、カメラを少し回転させ、コントロールを切り替えると、ひどく間違った結果が得られ始めました。また、クォータニオン(setEulerFromQuaternion)からオイラー角を取得すると、誤ったデータが生成されました。
そのため、それらを切り替えることはできましたが、回転座標を同期させることができなかったため、カメラの位置が正しいときに「スイッチをオン」にすると、回転が間違っています。
PS。FirstPersonControls(オイラー角も)でいくつかの結果が得られましたが、使用している画面の緯度と経度の方法は非常にエラーが発生しやすく、Z軸の回転があると完全に失敗します。