2013-08-23 3 views

ответ

0

По повороту X/Y/Z, я предполагаю, что вы хотите какой-то трекбол, такой как управляющий виджет. Чтобы реализовать это, вы хотите изучить использование кватернионов.

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

dx = x - lastX; 
dy = y - lastY; 
rotation.x -= dy; 
rotation.y += dx; 
rotation.z = 0; 

Затем зажать вращение так движение рыскания не инвертировать

rotation.y = min(max(rotation.y, -pi/2), pi/2); 

в качестве альтернативы, если вы хотите найти вращение вокруг центра экрана, как вы перетащить ...

midX = screenWidth/2; 
midY = screenHeight/2; 
downAngle = atan2(downX-midX, downY-midY); //angle from +x to start position of rotation 
upAndle = atan2(upX-midX, upY-midY); //angle from +x to current position 
angle = upAndle - downAngle; //difference between them 
if (angle > pi) angle -= 2*pi; //keep angle less than 180 degrees in either direction 
if (angle < -pi) angle += 2*pi; 
Смежные вопросы