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)); }
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 { } } } }