ブログランキング・にほんブログ村へ


iPhone/iPad用潜水艦ゲームアプリ ソナーエコー iTunesにて公開中

2015年03月18日

[iOS] CMMotionManager multiplyByInverseOfAttitude の結果がだんだんずれてくる

表題のとおり。

CMMotionManagerでroll, pitch , yawを取得するわけだけが、キャリビュレーションみたいなことをしたいときがけっこうある。ゲームとか。
そういうときは、CMMotionManagerのメンバのCMAttitudeをcopyしてとっといて
multiplyByInverseOfAttitudeを使うといいですよ、という情報があちこちに落ちてる。つうかそれしかないくらい。
referenceAttitude云々ってやつだ。
確かにそれでうまくいった。
最初のうちは。
ところが不思議なことに、しばらくしてるとゼロ点がずれてくる。いや、しばらくっていうかみるみるというか。
10秒もするとそれなりにずれる。入力角度に対して掛け算してて(たいがいしてると思う)敏感にしてるととても無視できない。
両方のメンバがコピーなので、経過時間が関係するというのはおかしいのだが、いろいろ試したが効果なし。
両方のroll,pitch,yaw値をダンプしてみても値はどちらもずれていってない。
multiplyByInverseOfAttitudeの結果だけがずれていく。

結局、ゼロ点の roll,pitch,yawを単純に引くという方法をつかった。
これだと、ねっころがってやると左右が反対になったり、横倒しでやるとわけわからなくなったりするのがいやなのだが、仕方ない。

同じことを言ってる人を一人だけみつけたが、その人も方法はこれしかなかったようだった。
英語でもぐぐってみたが、みつからず。あまり検索ワードを工夫してがんばってないけど。

ひょっとするとiOS7かiPhone5のバグかもしれない。

multiplyByInverseOfAttitudeが効いてくれたらハッピーだったんだがなぁ。
タグ:iOS
posted by みこあいさ at 13:59| iOS開発

2015年03月14日

[iOS] iPhone6/Plusで CGContextStrokePathで線が描けないケース

iPhone6/PlusだけなぜかCGContextStrokePathが機能しないケースに遭遇。
パターンとしては

CGContextBeginPath

CGContextMoveToPoint //線の指定
CGContextAddLineToPoint

NSString drawInRect // 文字表示 ※1

CGContextSetLineWidth
CGContextSetStrokeColor
CGContextStrokePath // パス表示

//※2

これでiPhone6/Plus以外では文字も線もかけているが、iPhone6/Plusのみ描かれない。
怪しいところというので ※1の 文字表示を間に挟まないように変更。具体的には※2のところに移動。
それで直った。

iOS8のせいかとも思ったが、シミュレータで試した限りではiPhone5のiOS8では再現せず。

先日のOpenGLSLのfloat精度の件といい、iPhone6/Plusには不思議な独特な制限がある様子。
タグ:iOS
posted by みこあいさ at 21:05| iOS開発