public static Matrix GetWmoDoodadTransform(MODD.MODDEntry modd, MODF.MODFEntry modf) { var modfTransform = GetTransform(modf.Position, modf.Rotation); var translation = Matrix.Translation(modd.Position); var quatRotation = Matrix.RotationQuaternion(new Quaternion(-modd.Rotation[0], -modd.Rotation[1], -modd.Rotation[2], modd.Rotation[3])); return(Matrix.Scaling(modd.Scale) * quatRotation * translation * modfTransform); }
public static Matrix4 GetDoodadTransform(MODD.MODDEntry modd, MODF.MODFEntry modf) { var placementMatrix = Matrix4.Identity; placementMatrix = Matrix4.Mult(GetWMOTransform(modf.Position, modf.Rotation), placementMatrix); placementMatrix = Matrix4.Mult(Matrix4.CreateTranslation(modd.Position), placementMatrix); placementMatrix = Matrix4.Mult(Matrix4.CreateFromQuaternion(modd.Rotation), placementMatrix); placementMatrix = Matrix4.Mult(Matrix4.CreateScale(modd.Scale), placementMatrix); return(placementMatrix); }
public Mesh GenerateDoodad(MODD.MODDEntry doodadDefinition, MODF.MODFEntry wmoDefinition = null) { string path; if (!MODN.Filenames.TryGetValue(doodadDefinition.ofsMODN, out path)) { return(null); } var doodad = new M2(path); if (!doodad.IsCollidable) { return(null); } if (wmoDefinition != null) { return(doodad.Mesh.Transform(Transformation.GetDoodadTransform(doodadDefinition, wmoDefinition))); } return(doodad.Mesh); }