Датчики Google Cardboard VR
Я использую Карточку Google (класс HeadTracker
), чтобы обнаружить определенные вещи о вращении устройства в AR-приложении. Он работает очень хорошо.
Однако на некоторых устройствах он не работает (ничего не происходит). Я предполагаю, что это потому, что у них нет необходимых датчиков. Мои вопросы:
1) Я хочу определить во время выполнения, поддерживает ли текущее устройство HeadTracker, т.е. имеет необходимые датчики. Для этого мне нужно знать, какие датчики используются HeadTracker, поэтому я могу запросить, присутствуют ли эти датчики. Каковы эти датчики?
2) Есть ли способ указать необходимые датчики в AndroidManifest? Насколько я вижу, нет никакого способа. Поэтому, если пользователь загружает мое приложение, приложение должно будет сообщить пользователю во время выполнения, что его устройство не поддерживается. Это не приятно. Любые мысли?
Ответы
Ответ 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 опыт.
Ответ 3
Используйте Fibrum SDK, если вы хотите, чтобы ваша игра работала без гироскопов.
например, попробуйте
Космос X Hunter VR:
https://play.google.com/store/apps/details?id=com.creation3d.spacexhuntervr
VR Bowl:
https://play.google.com/store/apps/details?id=com.creation3d.vrbowl
и игры от Fibrum