Example #1
0
        private IEnumerable <TrackComplexModelEntry> LoadModels()
        {
            var directory = Path.GetDirectoryName(_modelsIniFilename) ?? "";

            return(from section in new IniFile(_modelsIniFilename).GetSections("MODEL")
                   let rot = section.GetSlimVector3("ROTATION")
                             select new TrackComplexModelEntry {
                Kn5 = Kn5.FromFile(Path.Combine(directory, section.GetNonEmpty("FILE") ?? "")),
                Matrix = Matrix.Translation(section.GetSlimVector3("POSITION")) * Matrix.RotationYawPitchRoll(rot.X, rot.Y, rot.Z),
            });
        }
Example #2
0
        /// <summary>
        /// Возвращает матрицу в системе координат DirectX
        /// </summary>
        /// <param name="frame">Фрейм</param>
        /// <returns></returns>
        public static Matrix ToDirectXMatrix(this Frame3D frame)
        {
            //Если нет кватерниона - поворачиваем исходя из Pitch, yaw, roll - иначе через кватернион.
            if (!frame.Orientation.HasValue)
            {
                return(Matrix.RotationYawPitchRoll((float)frame.Pitch.Radian,
                                                   (float)frame.Roll.Radian, -(float)frame.Yaw.Radian) *
                       Matrix.Translation(-(float)frame.X, (float)frame.Y, (float)frame.Z));
            }
            Quat quat = frame.Orientation.Value;
            var  q    = new Quaternion((float)quat.X, (float)quat.Y, (float)quat.Z, (float)quat.W);

            return(Matrix.RotationQuaternion(q) *
                   Matrix.Translation(-(float)frame.X, (float)frame.Y, (float)frame.Z));
        }