私はTHREE.jsを使用しており、ユーザーがデバイスを回転させることができ、それに応じてシーンが移動するWebアプリを作成しています。 this に似たもの。
ジャイロスコープを備えたデバイスと備えていないデバイスを区別するのに問題があります。
方向センサーをまったく備えていないデバイスの検出は簡単です。 DeviceOrientationEventのすべてのアルファ、ベータ、ガンマ値はnullです。ただし、モバイルデバイスにジャイロがない場合でも、alpha、beta、gammaの値DeviceOrientationEvent。問題は、これらの値が非常にノイズが多く、シーンに多くの揺れが発生することです。したがって、これらのデバイスのデバイスの向きを無効にします。しかし、これまでのところ、データがジャイロまたは加速度計からのものであるかどうかを確認する方法を見つけることができませんでした(データがどこから来ているかについての私の推測です)。
それが役立つかどうかはわかりませんが、これがどのように処理されるかの良い例を見ることができます ここ 。 (下部にあるアイコンのような軸を押します。違いを確認するには、ジャイロスコープとジャイロスコープがないデバイスで表示する必要があります)。ジャイロスコープのないデバイスに対して彼らがしていることは、ピッチとroll。 yawは、電話で回転しても更新されません。
ですから、それは間違いなく可能ですが、たくさん検索した後でも、その方法はまだわかりません。誰かが助けてくれるといいですね。
どうもありがとう。
MOTO Eのように、加速度計だけを備えたデバイスでは、すべての値がnullになります-DeviceOrientationEventおよびrotationRate-accelerationInclusiveGravityを除いて。しかし、私が以前にテストした、ジャイロがなくてもDeviceOrientationEventのアルファ、ベータ、ガンマ値を提供するデバイスは、2加速度計 GSMアリーナの「センサー」の詳細 。これが、騒々しいにもかかわらず、DeviceOrientationEventデータを提供できたと私が思う方法です。 2つの加速度計では回転速度を与えるのに十分ではないようです;)
ジャイロスコープが存在するかどうかを確認したい場合は、ジャイロスコープのみが測定できるパラメータを確認してください。たとえば、回転速度はジャイロスコープだけが測定するものです。
ジャイロスコープが存在するかどうかを示すサンプルコードを見てください。
var gyroPresent = false;
window.addEventListener("devicemotion", function(event){
if(event.rotationRate.alpha || event.rotationRate.beta || event.rotationRate.gamma)
gyroPresent = true;
});
お役に立てれば!
ちょっとした注意:ここでは、rotationRate(およびaccelerationなど)はこのイベントからのみアクセスできるため、DeviceMotionEventが使用されます。 OPはDeviceOrientationEventのみを試行したため、これは言及する価値があります。