У меня есть значения акселерометра для 3-й оси (обычно, когда есть только гравитация, содержит данные от -1,0 до 1,0):
float Rx;
float Ry;
float Rz;
Я делаю вычисления сомы, затем получаю углы для каждой оси.
float R = sqrt(pow(Rx,2)+pow(Ry,2)+pow(Rz,2));
float Arx = acos(Rx/R)*180/M_PI;
float Ary = acos(Ry/R)*180/M_PI;
float Arz = acos(Rz/R)*180/M_PI;
Затем я устанавливаю значения для углов окна в opengl
rquad = Arx;
yquad = Ary;
Который вращает мое поле:
glRotatef(yquad,1.0f,0.0f,0.0f);
glRotatef(rquad,0.0f,1.0f,0.0f);
Работает на полушарии. Я хотел бы использовать полную сферу, и я знаю, что мне нужно использовать значение Arz, чтобы он работал, но я не знаю, как использовать его для этого вращения. Не могли бы вы мне помочь?
Обновление: Окончательный ответ в моем случае:
rquad = -atan2(Rx/R, Rz/R)*180/M_PI;
yquad = -atan2(Ry/R, Rz/R)*180/M_PI;