アニメ化されたオブジェクトのコレクションを含む単一のメッシュ (建物) に関する質問があります (これらのオブジェクトは完全な建物を構成し、構築時に地面からさまざまな速度と回転で上昇します)。
メッシュ内のアニメートされたオブジェクトにはすべて、独自の位置と回転のアニメーション トラックがあります。3DS Max から ASE としてエクスポートし、独自のフォーマットに変換して、ゲーム エンジンで使用します。
したがって、現時点では、メッシュ内のすべてのアニメーション化されたオブジェクトのアニメーション化された位置を正常に表示できます。次のことを行います。
スケール、回転、および移動変数は、建物の変換情報です。これは、すべてのサブオブジェクトに有効です。pos 変数は、建物の中心に対するサブオブジェクトの位置を示します。
foreach (GeometricObject geoObject in mesh.GeoObjects)
{
Vector3 pos = geoObject.AnimationData.PositionTrack[(int)m_keyFrameTime];
Vector3 translatedPos = new Vector3(translation.X + pos.X,
translation.Y + pos.Y,
translation.Z + pos.Z)
_eRenderer.ActiveCamera.World = Matrix.CreateScale(scale) *
Matrix.CreateFromQuaternion(rotation) *
Matrix.CreateTranslation(translatedPos);
}
これにより、アニメートされた建物 (地面から立ち上がる) が完全に表示され、すべてのサブオブジェクトが正しい位置に配置されます。
ここで、サブオブジェクトを回転させようとすると問題が発生します。かなりの数の異なるアプローチを試みましたが、サブオブジェクトを回転させた後、サブオブジェクトの移動は常に混乱しているようです。これは私が現在持っているものですが、まだめちゃくちゃです:
foreach (GeometricObject geoObject in mesh.GeoObjects)
{
Vector3 pos = geoObject.AnimationData.PositionTrack[(int)m_keyFrameTime];
Vector3 translatedPos = new Vector3(translation.X, translation.Y, translation.Z)
Matrix rotateSubObjects;
rotateSubObjects = Matrix.CreateTranslation(new Vector3(pos.X, pos.Y, pos.Z));
rotateSubObjects *= Matrix.CreateFromQuaternion(geoObject.AnimationData.RotationTrack[(int)m_keyFrameTime]);
_eRenderer.ActiveCamera.World = Matrix.CreateScale(scale) *
Matrix.CreateFromQuaternion(rotation) *
Matrix.CreateTranslation(translatedPos) *
rotateSubObjects;
}
サブオブジェクトを原点を中心に回転させるには、サブオブジェクトを原点に戻し、次にワールド位置に戻す必要があるかもしれないと読みましたが、この場合の方法がわかりません。
私はアイデアがありません。どんな助けもいただければ幸いです!よろしく、リアーン。