2013-02-02 6 views
0

실용적인 변형 (가속도계/자이로 스코프/나침반에서)을 모델 뷰 매트릭스에 적용하고 싶습니다. 이 방법은 :롤/피치/요와 함께 행렬 회전하기

modelViewMatrix = GLKMatrix4MakeLookAt(cam.x, cam.y, cam.z, 
             0.f, 0.f, 0.f, 
             0.f, 1.f, 0.f); 

GLKVector3 v = GLKVector3Normalize(x, y, z); // accelerometer + gyro 

float roll = asinf(-v.x); 
float pitch = atan2f(v.y, -v.z); 
float yaw = GLKMathDegreesToRadians(heading); // compass 

GLKMatrix4 m = GLKMatrix4Identity; 
m = GLKMatrix4RotateX(m, pitch); 
m = GLKMatrix4RotateY(m, roll); 
m = GLKMatrix4RotateZ(m, yaw); 

modelViewMatrix = GLKMatrix4Multiply(m, m_modelViewMatrix); 

작동합니다. 그러나 문제가 있습니다. 휴대 전화가 "카메라"(가로) 방향 일 때 "슬라이드 잠금 해제"가 정확히 수직 인 경우 yz은 모두 거의 0에 가까워 표시가 자주 바뀝니다. 그래서, ATAN2()는 일부 "임의"값을 반환하고, 장면

x, y, z에서 하나의 매트릭스를 작성하여 전환을 단순화 할 수있는 방법이 있어야합니다 ... 수평면에서 이동하고, 정확성을 잃지 않고 heading ...

UPD : Found the problem! 사람이 내 매트릭스 솔루션을 적용하는 방법을 설명 할 수 있습니까?

답변