Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }