2010-07-01 2 views
0

я в настоящее время кодирования немного AR-игры для себя на iPhone 3GS ;-)gluLookAt акселерометр

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

Когда я держу iPhone в с прямыми передо мной, я получаю эти значения:

  • Accel. х = 1
  • axxel.y = 0
  • accel.z = 0

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

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

Таким образом, значения находятся между:

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

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

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

Как я могу управлять этим?

Спасибо ;-)

ответ

0

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

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

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

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

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

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

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

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

Удача!