私は最新のgoogleVr SDK(1.10)を使用していますが、城防のような統一されたシーンをいくつか試してみました。このドリフトをプログラム的に防止する方法はありますか?Unity google cardboard drift
私はサムスンのジャイロスコープを修正するためにいくつかのビデオを見ましたが、私はこの記事で説明したように、この
私は最新のgoogleVr SDK(1.10)を使用していますが、城防のような統一されたシーンをいくつか試してみました。このドリフトをプログラム的に防止する方法はありますか?Unity google cardboard drift
私はサムスンのジャイロスコープを修正するためにいくつかのビデオを見ましたが、私はこの記事で説明したように、この
を防ぐために、いくつかのコードは、それは、まだ未解決の問題だとします
GvrViewerMain rotates the camera yourself. Unity3D + Google VR
しかしに従って必要に応じて、次の回避策を見つけることができます。
デルタローテーションを見つけて、小さすぎると無視します。
using UnityEngine;
public class GyroCorrector {
public enum Correction
{
NONE,
BEST
}
private Correction m_correction;
public GyroCorrector(Correction a_correction)
{
m_correction = a_correction;
}
private void CorrectValueByThreshold(ref Vector3 a_vDeltaRotation, float a_fXThreshold = 1e-1f, float a_fYThreshold = 1e-2f, float a_fZThreshold = 0.0f)
{
// Debug.Log(a_quatDelta.x + " " + a_quatDelta.y + " " + a_quatDelta.z);
a_vDeltaRotation.x = Mathf.Abs(a_vDeltaRotation.x) < a_fXThreshold ? 0.0f : a_vDeltaRotation.x + a_fXThreshold;
a_vDeltaRotation.y = Mathf.Abs(a_vDeltaRotation.y) < a_fYThreshold ? 0.0f : a_vDeltaRotation.y + a_fYThreshold;
a_vDeltaRotation.z = Mathf.Abs(a_vDeltaRotation.z) < a_fZThreshold ? 0.0f : 0.0f;//We just ignore the z rotation
}
public Vector3 Reset()
{
return m_v3Init;
}
public Vector3 Get(Vector3 a_v3Init)
{
if (!m_bInit)
{
m_bInit = true;
m_v3Init = a_v3Init;
}
Vector3 v = Input.gyro.rotationRateUnbiased;
if (m_correction == Correction.NONE)
return a_v3Init + v;
CorrectValueByThreshold(ref v);
return a_v3Init - v;
}
}
...そして "GvrHead" から "UpdateHead" 方法でこのようなものを使用します。
GvrViewer.Instance.UpdateState();
if (trackRotation)
{
var rot = Input.gyro.attitude;//GvrViewer.Instance.HeadPose.Orientation;
if(Input.GetMouseButtonDown(0))
{
transform.eulerAngles = m_gyroCorrector.Reset();
}
else
{
transform.eulerAngles = m_gyroCorrector.Get(transform.eulerAngles);//where m_gyroCorrector is an instance of the previous class
}
}
あなたはいくつかの問題を見つけることができます。主にではなく、排他的:運動あなたが不正確に付属して相対的な位置を扱っている
を検出するために、そこにオフセットされたように、ヘッドを移動させるとき
潜時に問題があります。したがって、反対の動きをしたときに同じ位置を見つけることは100%確実ではありません。
クォータニオンの代わりにオイラー表現を使用していますが、精度が低いようです。
また、フィールドについて話すこれらのリンクに興味があるかもしれない:
http://scholarworks.uvm.edu/cgi/viewcontent.cgi?article=1449&context=graddis
Gyroscope drift on mobile phones
とコードのこの作品: https://github.com/asus4/UnityIMU
それに役立つことを願って、