ジャイロを使ってARアプリを開発しています。アップルのコード例pARkを使用しました。回転行列を使用して座標の位置を計算しますが、これは非常にうまくいきますが、今は「レーダー」を実装しようとしているので、デバイスの見出しに応じてこれを回転させる必要があります。CLLocationManagerの見出しを使用していますが、正しくありません。
問題は、CMAttitudeを使用してデバイスの見出しを取得し、画面に表示されたものを正確に反映するにはどうすればよいですか?
私は回転行列とそのようなものに不慣れです。
これは、AR座標の計算に使用されるコードの一部です。次の態度でcameraTransformを更新します。
CMDeviceMotion *d = motionManager.deviceMotion;
if (d != nil) {
CMRotationMatrix r = d.attitude.rotationMatrix;
transformFromCMRotationMatrix(cameraTransform, &r);
[self setNeedsDisplay];
}
次に、drawRectコードで:
mat4f_t projectionCameraTransform;
multiplyMatrixAndMatrix(projectionCameraTransform, projectionTransform, cameraTransform);
int i = 0;
for (PlaceOfInterest *poi in [placesOfInterest objectEnumerator]) {
vec4f_t v;
multiplyMatrixAndVector(v, projectionCameraTransform, placesOfInterestCoordinates[i]);
float x = (v[0] / v[3] + 1.0f) * 0.5f;
float y = (v[1] / v[3] + 1.0f) * 0.5f;
ビューをピッチ角で回転させます。モーションの更新は、北を使用して開始されます。
[motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXTrueNorthZVertical];
ですから、デバイスの「ロール」/ヘディングを任意の位置(ピッチとヨーを問わず...)で取得できるはずだと思いますが、方法がわかりません。