2017-06-17 12 views
0

私はUnityを使ってARアプリケーションを作っています。UnityのScreenToWorldPointと実際のカメラ

「実カメラ」を使用すると、フィーチャマッチングを使用して、画像が既にデータベースにある特定のオブジェクトと一致します。特徴マッチング後

は、私は以下のインスタンス内のキーポイントの値のいずれかを保存:

KeyPoint key_point; 

その後、私はそのkey_pointを使用して、現実世界の位置を持っていると思います。

//let's assume that 
    //'x' is x-coordinate of key_point 
    //'y' is y-coordinate of key_point 

    Vector3 p = camera.ScreenToWorldPoint (Vector3 (x, y, camera.nearClipPlane)); 

「camer.nearClipPlane」を使用している他の人々は、仮想3次元の世界でそれを使用していたので、私は、それが可能であるかはわかりません。

可能であれば、実際の世界で2次元位置を3次元位置に変更できる他の方法はありませんか(実際のカメラの世界)?

答えて

1

あなたのソリューションには、カメラのFOVを考慮しないという問題があると思います。したがって、あなたのスクリーンポイントは、近くのクリップ平面に投影されます。しかし、それは画面の中心にのみ正しいです。ドキュメントによると

Ray ray = Camera.main.ScreenPointToRay(x,y); 

https://docs.unity3d.com/ScriptReference/Camera.ScreenPointToRay.html

結果の光線はの近くに平面上に始まる、ワールド空間である

一つの簡単な解決策は、使用する線オブジェクトですカメラと、画面上の位置(x、y)ピクセル座標を通過します(position.zは無視されます)。 "

だからあなたのポイントは次のようになります。

Vector3 point = ray.origin; 
関連する問題