2011-02-04 19 views
0

私は、WPFで3Dオブジェクト(Model3DGroup)の中心点を変更する最善の方法に苦労しています。3D WPFオブジェクトの中心を変更する方法

私はSketchUpからモデルをエクスポートしましたが、すべて問題はありませんが、中心が外れてオブジェクトを回転させるのに問題があります。 今私は各オブジェクト自身の中心の周りにいくつかの回転を行う必要があり、どのようにそれを行うには考えがありません...

すべての提案をいただければ幸いです。ジャクソン教皇の提案を使用して

おかげ

は、私は、オブジェクトの中心点を取得するために以下のコードを使用:

var bounds = this.My3DObject.Bounds; 

var x = bounds.X + (bounds.SizeX/2); 
var y = bounds.Y + (bounds.SizeY/2); 
var z = bounds.Z + (bounds.SizeZ/2); 

var centerPoint = new Point3D(x, y, z); 

その間私はすべて試してみて、移動するために、より良い解決策を見つけるてみよう目的のオフセットを指します...

答えて

2

オブジェクトを中心に回転させるには、オブジェクトの中心が原点になるように最初に移動する必要があります。それからそれを回転させてください(そして潜在的に元の位置にそれを翻訳します)。

オブジェクトの最小範囲と最大範囲を見つけ、center = min +(max-min)/ 2を計算します。 (-centreX、-centreY、-centreZ)で翻訳し、(centreX、centreY、centreZ)で回転して翻訳します。

+0

これは可能な解決策のようです。しかし、私のモデルは何百ものポイントを持っています。どのようにして最大/最小延長を得るのですか? –

+0

各点をループし、各次元の最小値と最大値を求めます。オブジェクトが静的な場合は、最初にこれを行うことができます。オブジェクトは移動しますが(シェイプは変更されません)、それらを一度計算してから、オブジェクトと同じ変換を適用して現在の値を取得できます。 –