2016-12-04 29 views
0

3Dオブジェクトに配置された矩形があるOpenGLアプリケーションを作成しています。 3Dオブジェクトは、動き回ることができ、回転することができ、長方形は、これらの動きに追従する。3D座標を2D平面にマップする方法

私がしたいのは、マウスを矩形の方に向けることで、矩形のその点に点が現れるようにすることです。その点を、矩形を「保持」する3Dオブジェクト動き回る。

私は飛行機の交差点を見つける方法を知っており、私は接触点の世界座標を見つける方法を知っています。私が必要とするのはに変換するワールドを矩形の2次元ローカル座標系に変換することです。例えば

、私は与えられたオリエンテーション(申し訳ありませんが、私は本当にきちんと描くことはできません)で、3Dの世界では、このように配置平面があるとします。

enter image description here

には黒のポイントをcenterは飛行機の起点ですが、青い点は私が探したい場所です。ポイントの近くの数字はワールド座標です。この例では、Z軸が画面から出てきます。

私はこのように、平面のローカル座標系の青い点の座標をマッピングしたいと思います: enter image description here

私は何とかこれは難しいことではありませんことを知っているが、私は見つけることができませんまったく。どんなヒントもありがとう!

+0

可能な重複(不可知論言語): - (http://stackoverflow.com/questions/5276315/graphics [2D投影に3D点に変換する式グラフィック]

擬似コードでは、このようなものです-equence-to-convert-3d-point-to-2d-projection) –

答えて

0

すでに、変換行列を使用して矩形をレンダリングしているとします。ポイントの3D位置を持っている場合、それを逆変換行列で変換するだけで、矩形の空間に3D位置が得られます。ローカルシステムが矩形と揃っている場合、座標の1つは常にゼロになり、ドロップすることができます。

+0

問題は、このアプリケーションに特定のフレームワークを使用していることです。これはOpenGLに基づいていますが、バックグラウンドでの処理方法にはほとんどアクセスしていません。私は手動で変換行列を操作するのではなく、フレームワークはバックグラウンドでそれを行い、干渉することはできません。各オブジェクトについて、私はモデル・マトリックスを(フレームワークで計算して)得ることができますが、自分自身を設定することはできません。私は座標をローカル座標系からワールド座標に変換することもできますが、その逆はできません。これらの制限のために、私は式などを探していました – Beriol

+0

オブジェクトのモデル行列はあなたが必要とするものです。 –

0

私はこの投稿に必要なものを見つけましたhere

私にとっての解決策は、矩形のローカル座標系のx軸とy軸に点を投影することです。

// I compute the direction that go from the origin of the rectangle to its x axis, in world coordinates, and take the norm; same thing for the y axis 
var xDir = Norm(mRectangle.LocalToWorld([1, 0, 0]) - mRectangle.LocalToWorld([0, 0, 0])); 
var yDir = Norm(mRectangle.LocalToWorld([0, 1, 0]) - mRectangle.LocalToWorld([0, 0, 0])); 

// I compute the dot product 
mLocalPosition.x = Dot(xDir, (contactPoint - mRectangle.LocalToWorld([0, 0, 0]))); 
mLocalPosition.y = Dot(yDir, (contactPoint - mRectangle.LocalToWorld([0, 0, 0]))); 

// I can now set the position of the point converting the local coordinates found to world coordinates 
mPoint.SetPosition(mRectangle.LocalToWorld([mLocalPosition.x, mLocalPosition.y, 0])); 
関連する問題