2017-01-11 21 views
1

私はwikitudeを使用していますので、認識されたマーカーの画面座標を取得する必要があります。私はGLKMatrix4にprojectionViewMatrixを変換していると私は、私は複数のサイトで見つけたこのコードを試してみた:ワールド座標を画面に表示

let point = Point3D(x: m.m.12, y: m.m.13, z: m.m.14)//m is the matrix 
let x = round(((CGFloat(point.x)+1)/2)*self.view.frame.width) 
let y = round(((1-CGFloat(point.y))/2)*self.view.frame.height) 

事は、私がビューよりもマーカーを中心ならば、私は計算されたもの座標で移動してるということですも中心に置かれています。マーカーを動かすと、ビューは正しい方向に動きますが、動きが速すぎてマーカーには残りませんが、マーカーを移動した方向に画面からはみ出しています。

編集: これは私がポインタwikitudeを変換するために使用するコードですGLKMatrix4に私たちを提供しています。テストなし

-(instancetype)initWithCArray:(const float *)pointer{ 
    self = [super init]; 
    if(self != nil){ 
     glkMatrix = GLKMatrix4Identity; 
     memcpy(glkMatrix.m, pointer, 16*sizeof(float)); 
    } 
    return self; 
} 
+0

いくつかのコード(mの作成)と、達成したいと思うwharのいくつかの情報(どのマーカー; touchイベント?)を投稿してください。 – shallowThought

+0

私は行列を扱うクラスを持っています。 initメソッドではUnsafePointer が使用され、GLKMatrix4を返すgetMatrix()メソッドがあります。私は約1年前から私がどこにいたのか分からない。私は既にそのクラスをOpenGL/metalとwikitudeプロジェクトで成功を収めて使ってきました。マーカーはwikitudeが認識する単なる画像です。私は画面上の私のマーカーに従うビューを持っているが、私のUIと後でビューを統合する必要があるので、今回はOpenGL/metalを使うことができない。 (アニメーションとウインドウへの変換、ios要素を含む)touchevents。 – kemkriszt

+0

ええ、私はちょうど私のコンピュータに持ってきました。そのポインタを変換するコードを追加しましたwikitudeはGLKMatrix4に私たちを提供します – kemkriszt

答えて

0

、私はあなたがラウンドしたい理由を理解して疑わないことはrootです問題の丸めを削除します。

let x = CGFloat(((point.x + 1.0)/2.0)) * self.view.frame.width 
let y = CGFloat(((1.0 - point.y)/2.0)) * self.view.frame.height 

また、私はyx...point.y + 1.0)のように扱われるべきだと思うだろうが、あなたは方向が正しいと言っているように、私はおそらく間違っています。

+0

さて、私は何が起こっているのかわかりません。私は何が変わったのか分かりませんが、今度は丸みの有無にかかわらず軸が入れ替わっていますそれは上下左右に動きます)。 – kemkriszt

関連する問題