private static M2.M2 TransformWMOM2(M2Model model, IEnumerable<int> indicies, DoodadDefinition modd)
{
var currentM2 = new M2.M2();
currentM2.Vertices.Clear();
currentM2.Indices.Clear();
var origin = new Vector3(modd.Position.X, modd.Position.Y, modd.Position.Z);
// Create the scalar
var scalar = modd.Scale;
var scaleMatrix = Matrix.CreateScale(scalar);
// Create the rotations
var quatX = modd.Rotation.X;
var quatY = modd.Rotation.Y;
var quatZ = modd.Rotation.Z;
var quatW = modd.Rotation.W;
var rotQuat = new Quaternion(quatX, quatY, quatZ, quatW);
var rotMatrix = Matrix.CreateFromQuaternion(rotQuat);
var compositeMatrix = Matrix.Multiply(scaleMatrix, rotMatrix);
for (var i = 0; i < model.BoundingVertices.Length; i++)
{
// Scale and transform
var basePosVector = model.BoundingVertices[i];
var baseNormVector = model.BoundingNormals[i];
//PositionUtil.TransformToXNACoordSystem(ref vertex.Position);
// Scale
//Vector3 scaledVector;
//Vector3.Transform(ref vector, ref scaleMatrix, out scaledVector);
// Rotate
Vector3 rotatedPosVector;
Vector3.Transform(ref basePosVector, ref compositeMatrix, out rotatedPosVector);
Vector3 rotatedNormVector;
Vector3.Transform(ref baseNormVector, ref compositeMatrix, out rotatedNormVector);
rotatedNormVector.Normalize();
// Translate
Vector3 finalPosVector;
Vector3.Add(ref rotatedPosVector, ref origin, out finalPosVector);
currentM2.Vertices.Add(finalPosVector);
}
currentM2.Indices.AddRange(indicies);
return currentM2;
}