私は拡張現実アプリのようなものを作っています。このアプリでは、iOSデバイスがどのように動いても重力との整合性を保ちたいOpenGLシーンがあります。iPhoneを横に傾けるとその番号が台無しになるのを発見するまで、CMDeviceMotion.attitude.pitchでうまく設定できたと思いました。そこで、pARk *の例からいくつかのコードを取得し、垂直アクセスの周りの回転を分離しようとしています。私が描いているシーンは、ユーザーがどちらの方向を向いているかを気にせず、フィギュアは常に視聴者から一定の距離を置いて描かれます。垂直軸の回転コンポーネントを理解するとき、それを逆にして回転行列から乗算できるので、ユーザーが見出しを変更したときにOpenGLの数値を静止させておくことができると思います。
これが私のコードです:
CMDeviceMotion *d = motionManager.deviceMotion;
if (d != nil) {
CMRotationMatrix r = d.attitude.rotationMatrix;
transformFromCMRotationMatrix(cameraTransform, &r);
mat4f_t projectionCameraTransform;
multiplyMatrixAndMatrix(projectionCameraTransform, projectionTransform, cameraTransform);
GLKMatrix4 rotMatrix = GLKMatrix4Make(projectionCameraTransform[0],
projectionCameraTransform[1],
projectionCameraTransform[2],
projectionCameraTransform[3],
projectionCameraTransform[4],
projectionCameraTransform[5],
projectionCameraTransform[6],
projectionCameraTransform[7],
projectionCameraTransform[8],
projectionCameraTransform[9],
projectionCameraTransform[10],
projectionCameraTransform[11],
projectionCameraTransform[12],
projectionCameraTransform[13],
projectionCameraTransform[14],
projectionCameraTransform[15]);
}
次に、OpenGLで通常どおりrotMatrixを使用します。
考え、提案?前もって感謝します。
* pARkサンプルコードは、実空間にいくつかのポイントを設定し、ユーザーの位置とそれらのポイントの相対的な方向を計算して画面上に描画し、その位置を指す地平線に浮かんでいるように見せます。