Подтвердить что ты не робот

Датчики Google Cardboard VR

Я использую Карточку Google (класс HeadTracker), чтобы обнаружить определенные вещи о вращении устройства в AR-приложении. Он работает очень хорошо.

Однако на некоторых устройствах он не работает (ничего не происходит). Я предполагаю, что это потому, что у них нет необходимых датчиков. Мои вопросы:

1) Я хочу определить во время выполнения, поддерживает ли текущее устройство HeadTracker, т.е. имеет необходимые датчики. Для этого мне нужно знать, какие датчики используются HeadTracker, поэтому я могу запросить, присутствуют ли эти датчики. Каковы эти датчики?

2) Есть ли способ указать необходимые датчики в AndroidManifest? Насколько я вижу, нет никакого способа. Поэтому, если пользователь загружает мое приложение, приложение должно будет сообщить пользователю во время выполнения, что его устройство не поддерживается. Это не приятно. Любые мысли?

4b9b3361

Ответ 1

В картонном веб-сайте Google есть список совместимости: Это кажется несколько неполным, поэтому я попытался изучить исходный код Cardboard.jar . HeadTracker.java, похоже, имеет следующую логику:

SensorManager sensorManager = (SensorManager)HeadTracker.this.mContext.getSystemService("sensor");

for (int sensorType : HeadTracker.INPUT_SENSORS) {
  Sensor sensor = sensorManager.getDefaultSensor(sensorType);
  sensorManager.registerListener(HeadTracker.this.mSensorEventListener, sensor, 0, handler);
}

С INPUT_SENSORS, определенными в том же файле, что и

{TYPE_ACCELEROMETER, TYPE_GYROSCOPE};

Я не уверен, что HeadTracker может работать на телефонах только с одним из этих датчиков. Я предполагаю, что оба они необходимы.

Ваше приложение может потребовать определенных цензоров для запуска (или даже видимого на рынке Android) со следующими строками в вашем манифесте:

<uses-feature android:name="android.hardware.sensor.accelerometer" android:required="true" />
<uses-feature android:name="android.hardware.sensor.gyroscope" android:required="true" />

вы также можете проверить, доступны ли датчики для вашего приложения во время работы, используя SensorManager's public Sensor getDefaultSensor (int type).

Ответ 2

Гарнитура Google Cardboard не будет работать с акселерометром, ей нужен гироскоп.

Акселерометр может обнаруживать силы, применяемые к телефону. Это включает в себя чтение гравитационного тяготения Земли, поэтому телефон может оценить, где "вниз". Но акселерометр не может точно сказать, какова ваша ориентация в трехмерном пространстве, он может только приближаться к тому, что основывается на силах, которые он читает.

Это слишком низкая точность для VR, поэтому вам нужен гироскоп.

Если вы настроены на работу с вашим негироповым телефоном, вы можете написать фрагмент своего собственного кода, приближающий ориентацию телефона, основываясь на данных акселерометра, но имейте в виду, что он будет очень далек от действительно удовлетворяющего VR опыт.