Exemple #1
0
        public static MMDDanceModel LoadMMDModel(CtGraphicsInterface gi, string fileName)
        {
            CtMeshContainer ctMeshContainer = null;
            string          text            = Path.GetExtension(fileName).ToLower();

            if (text.Equals(".ctmm"))
            {
                ctMeshContainer = CtModelFileLoader.LoadCTMM(fileName, gi);
            }
            else if (text.Equals(".pmd") || text.Equals(".pmx"))
            {
                ctMeshContainer = CtModelFileLoader.LoadPMD(fileName, gi);
            }
            Dictionary <string, BoneAssigner> dictionary = new Dictionary <string, BoneAssigner>();
            CtMatrixPallet matrixPallet = ctMeshContainer.MatrixPallet;
            BoneAssigner   boneAssigner = new BoneAssigner(matrixPallet.GetBone("下半身"));
            BoneAssigner   value        = new BoneAssigner(matrixPallet.GetBone("上半身"), boneAssigner);

            dictionary.Add("Hips", new BoneAssigner(matrixPallet.GetBone("センター")));
            dictionary.Add("Chest", boneAssigner);
            dictionary.Add("Chest2", value);
            dictionary.Add("Neck", new BoneAssigner(matrixPallet.GetBone("首")));
            dictionary.Add("Head", new BoneAssigner(matrixPallet.GetBone("頭")));
            double num = CtMath.DegToRad(40.0);

            dictionary.Add("LeftCollar", new BoneAssigner(matrixPallet.GetBone("左肩")));
            dictionary.Add("LeftShoulder", new BoneAssigner(matrixPallet.GetBone("左腕"), CtMatrix4x4.Rotate(new CtVector3D(0f, 0f, 1f), num), null));
            dictionary.Add("LeftElbow", new BoneAssigner(matrixPallet.GetBone("左ひじ"), CtMatrix4x4.Rotate(new CtVector3D(0f, 0f, 1f), num), CtMatrix4x4.Rotate(new CtVector3D(0f, 0f, 1f), -num)));
            dictionary.Add("LeftWrist", new BoneAssigner(matrixPallet.GetBone("左手首"), CtMatrix4x4.Rotate(new CtVector3D(0f, 0f, 1f), num), CtMatrix4x4.Rotate(new CtVector3D(0f, 0f, 1f), -num)));
            dictionary.Add("RightCollar", new BoneAssigner(matrixPallet.GetBone("右肩")));
            dictionary.Add("RightShoulder", new BoneAssigner(matrixPallet.GetBone("右腕"), CtMatrix4x4.Rotate(new CtVector3D(0f, 0f, 1f), -num), null));
            dictionary.Add("RightElbow", new BoneAssigner(matrixPallet.GetBone("右ひじ"), CtMatrix4x4.Rotate(new CtVector3D(0f, 0f, 1f), -num), CtMatrix4x4.Rotate(new CtVector3D(0f, 0f, 1f), num)));
            dictionary.Add("RightWrist", new BoneAssigner(matrixPallet.GetBone("右手首"), CtMatrix4x4.Rotate(new CtVector3D(0f, 0f, 1f), -num), CtMatrix4x4.Rotate(new CtVector3D(0f, 0f, 1f), num)));
            dictionary.Add("LeftHip", new BoneAssigner(matrixPallet.GetBone("左足")));
            dictionary.Add("LeftKnee", new BoneAssigner(matrixPallet.GetBone("左ひざ")));
            dictionary.Add("LeftAnkle", new BoneAssigner(matrixPallet.GetBone("左足首")));
            dictionary.Add("RightHip", new BoneAssigner(matrixPallet.GetBone("右足")));
            dictionary.Add("RightKnee", new BoneAssigner(matrixPallet.GetBone("右ひざ")));
            dictionary.Add("RightAnkle", new BoneAssigner(matrixPallet.GetBone("右足首")));
            return(new MMDDanceModel(ctMeshContainer, dictionary));
        }
Exemple #2
0
        private void readMaterial(TextReader objTr)
        {
            CtMaterial ctMaterial = null;

            while (objTr.Peek() > -1)
            {
                string text = objTr.ReadLine().Trim();
                if (!string.IsNullOrEmpty(text))
                {
                    try
                    {
                        if (text[0] != '#')
                        {
                            string[] array = text.Split(new char[]
                            {
                                ' '
                            });
                            if (array[0].Equals("newmtl"))
                            {
                                CtMaterial ctMaterial2 = null;
                                if (this.materials.TryGetValue(array[1], out ctMaterial2))
                                {
                                    ctMaterial = ctMaterial2;
                                }
                            }
                            else if (array[0].Equals("Ka"))
                            {
                                if (ctMaterial != null)
                                {
                                    ctMaterial.Ambient = Color.FromArgb((int)CtMath.Clamp(float.Parse(array[1]) * 255f, 0f, 255f), (int)CtMath.Clamp(float.Parse(array[2]) * 255f, 0f, 255f), (int)CtMath.Clamp(float.Parse(array[3]) * 255f, 0f, 255f));
                                }
                            }
                            else if (array[0].Equals("Kd"))
                            {
                                if (ctMaterial != null)
                                {
                                    ctMaterial.Diffuse = Color.FromArgb((int)CtMath.Clamp(float.Parse(array[1]) * 255f, 0f, 255f), (int)CtMath.Clamp(float.Parse(array[2]) * 255f, 0f, 255f), (int)CtMath.Clamp(float.Parse(array[3]) * 255f, 0f, 255f));
                                }
                            }
                            else if (array[0].Equals("Ks"))
                            {
                                if (ctMaterial != null)
                                {
                                    ctMaterial.Specular = Color.FromArgb((int)CtMath.Clamp(float.Parse(array[1]) * 255f, 0f, 255f), (int)CtMath.Clamp(float.Parse(array[2]) * 255f, 0f, 255f), (int)CtMath.Clamp(float.Parse(array[3]) * 255f, 0f, 255f));
                                }
                            }
                            else if (array[0].Equals("Ns"))
                            {
                                if (ctMaterial != null)
                                {
                                    ctMaterial.SpecularPower = float.Parse(array[1]);
                                }
                            }
                            else if (array[0].Equals("map_Kd") && ctMaterial != null)
                            {
                                ctMaterial.TextureFile = array[1];
                            }
                        }
                    }
                    catch
                    {
                    }
                }
            }
        }