2017-11-11 49 views
-1

誰かに私の公式を教えてもらえますか? 私はローカル座標の頂点の位置を表すvector3dを持っています。この頂点がジオメトリの一部であるオブジェクトの回転と位置を表すMatrix3dがあります。この頂点のローカル位置を世界の座標?ローカル座標をワールド座標に変換する式

+0

私は、頂点の変換を表すMatrix3D **が必要だと思っています。次に、コンテナのMatrix3D **にそれを乗算します。https://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/ geom/Matrix3D.html#append()私はどちらがappendなのか、どれがappendeeなのかが重要だと思いますが、2つのオプションしかないので、試してみると傷つくことはありません。 – Organis

+0

その行列がグローバル座標にある場合、その頂点のグローバル座標を取得するには、行列を逆変換し、その結果をあなたのベクトル2dに乗算する必要があります。 'matrix3D :: invert()'の結果を確認してください。間違っていると、あなたはうんざりです。 – Vesper

+0

「頂点の変換を表すMatrix3Dが必要だと思います」 - このmatrix3dを作成するにはどうすればいいですか?次のようにします:m = new matrix3d; m..prependTranslation(v.x、v.y、v.z);またはこのようにm.position.x = v.x; m.position.y = v.y; m.position.z = v.z; ? – danielkotzer

答えて

0

元のvertex3dを維持するのに問題がありました。私はこの順序で演奏しました。これはうまくいきました。ここにコードがあります。私はm2.invert()を使用しなければなりませんでした。ここでのコードは次のとおりです。実際には

var m3d:Matrix3D = new Matrix3D();  
obj.Transform.copyToMatrix3D(m3d); 
var m2:Matrix3D = new Matrix3D(); 
m2.append(m3d); 
m2.invert(); 
m2.prependTranslation(obj.BoundingBox[i].x,obj.BoundingBox[i].y,obj.BoundingBox[i].z); 
obj.BoundingBox[i] = new Vector3D(m2.position.x,m2.position.y,m2.position.z); 

私が最初の場所でそれをやったとしてもOKだった:

var m3d:Matrix3D = new Matrix3D();  
obj.Transform.copyToMatrix3D(m3d); 
m3d.invert(); 
obj.BoundingBox[i] = m3d.transformVector(obj.BoundingBox[i]); 

私が行方不明になった唯一の事は)(反転しました。私はそれが何であるかを知りたがっています。 オブジェクト行列とそれに続く世界行列を追加しなければならないと言った人もいますが、世界行列を追加するだけで問題が生じました。 invert();それはいいのですが、なぜですか?

ベスパー、あなたはそれを提案した、ありがとう、なぜですか?

私はなぜ、経験豊富な人が私に答えを与えたのか知っています。カメラはすべてが鏡を映していることを示します。あなたが左に行くと、世界は右に動いているように見えます。

関連する問題