GluLookAt акселерометр - PullRequest
       1

GluLookAt акселерометр

0 голосов
/ 01 июля 2010

Я сейчас пишу небольшую AR-игру для себя на iPhone 3GS; -)

Я хочу использовать данные акселерометра и компаса для поворота камеры в opengl. Камера имеет фиксированное положение и может вращаться только благодаря акселерометру. Первоначально iPhone поворачивается на 90 °, чтобы иметь больший широкоформатный экран ;-) Таким образом, оси переключаются ...

Когда я держу iPhone прямо перед собой, я получаю следующие значения:

  • accel.x = 1
  • axxel.y = 0
  • accel.z = 0

При перемещении iPhone прямо над головой (через голову) я получаю следующие значения:

  • accel.x = 0
  • accel.y = 0
  • accel.z = 1

Значения находятся между:

  • x: 1 прямо и 0 над моей головой
  • y: 0 прямо в голове и 0 над моей головой
  • z: 0 прямо перед собой и 1 над моей головой

Я хочу использовать x, y, z для координат моей камеры. Например. accel.x = 0,5 и accel.z = 0,5

Камера должна изменять значения centerX, centerY и centerZ на основе значений, полученных от акселерометра.

Как мне это сделать?

Спасибо; -)

1 Ответ

0 голосов
/ 30 мая 2011

Если вы получаете X = 1 с телефоном прямо перед собой, это звучит так, как будто вы держите телефон в горизонтальной плоскости, с кнопкой справа, это правильно?

Акселерометр сообщает силу гравитации, поэтому X = 1 означает, что вы перемещаетесь вниз по оси X на экране.

Это означает, что ваше направление + X (в пикселях) на экране действительно является направлением + Y (рисунок в виде буквы) в вашем мире OpenGL, что соответствует показанию акселерометра -X.

В этой ориентации перемещение телефона влево и вправо даст показания акселерометра + Y и -Y соответственно. Насколько сильны показания, зависит от того, насколько сильно вы перемещаете телефон. Если вы двигаетесь медленно, показания могут быть неотличимы от нормального шума в данных. Если вы двигаетесь с той скоростью, с которой телефон упадет, если вы уроните его, ваши показания будут близки к «1» («1 G-сила» или «1 гравитация»). Если вы двигаете его быстрее, вы будете получить более высокие показания.

ПРИМЕЧАНИЕ : если вы просто поверните, а затем прекратите движение, показания акселерометра вернутся к 0. Гравитация - это мера ускорения («ускорение под действием силы тяжести»!), А не лицом. Вот почему компас стал важным.

Если наклонить экран телефона вниз или вверх, показания Z акселерометра изменятся, когда сила тяжести тянет «в» или «от» экрана. При полностью вертикальном положении экрана (при удерживании телефона прямо перед лицом в любой ориентации) значение Z-показания акселерометра должно быть равно 0.

Как вы переводите эти данные ориентации на камеру, зависит от вашего приложения. Просто помните, что «управлять» камерой, перемещая телефон, будет непросто, так как вам нужно учитывать как ускорение, так и замедление движений пользователя!

Чтобы помочь вам визуализировать это, посмотрите пример проекта XCode "Акселерометр". Просто найдите это слово в документах, и вы увидите пример проекта, который вы можете создать и поиграть, чтобы понять, что означает каждая ось.

Удача!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...