private static PMXFormat.Bone ConvertBone(PMDFormat pmd, int bone_index) { PMXFormat.Bone result = new PMXFormat.Bone(); PMDFormat.Bone pmd_bone = pmd.bone_list.bone[bone_index]; result.bone_name = pmd_bone.bone_name; result.bone_english_name = ((null != pmd.eg_bone_name_list)? pmd.eg_bone_name_list.bone_name_eg[bone_index]: null); result.bone_position = pmd_bone.bone_head_pos; result.parent_bone_index = ((ushort.MaxValue == pmd_bone.parent_bone_index)? uint.MaxValue: (uint)pmd_bone.parent_bone_index); result.transform_level = 0; switch (pmd_bone.bone_type) { case 0: //回転 result.bone_flag = PMXFormat.Bone.Flag.Movable | PMXFormat.Bone.Flag.DisplayFlag | PMXFormat.Bone.Flag.CanOperate; break; case 1: //回転と移動 result.bone_flag = PMXFormat.Bone.Flag.Movable | PMXFormat.Bone.Flag.Rotatable | PMXFormat.Bone.Flag.DisplayFlag | PMXFormat.Bone.Flag.CanOperate; break; case 2: //IK result.bone_flag = PMXFormat.Bone.Flag.IkFlag | PMXFormat.Bone.Flag.DisplayFlag | PMXFormat.Bone.Flag.CanOperate; break; case 3: //不明 goto default; case 4: //IK影響下 goto default; case 5: //回転影響下 goto default; //付与親に変換しないといけないのかも case 6: //IK接続先 goto default; case 7: //非表示 goto default; case 8: //捻り goto default; case 9: //回転運動 goto default; default: result.bone_flag = new PMXFormat.Bone.Flag(); break; } result.position_offset = Vector3.zero; result.connection_index = 0; result.additional_parent_index = 0; result.additional_rate = 0.0f; result.axis_vector = Vector3.zero; result.x_axis_vector = Vector3.zero; result.z_axis_vector = Vector3.zero; result.key_value = 0; result.ik_data = ConvertIKData(pmd.ik_list.ik_data.Where(x => x.ik_bone_index == bone_index).FirstOrDefault()); return(result); }
private static PMDFormat.Bone ConvertBone(PMXFormat pmx, int bone_index) { PMDFormat.Bone result = new PMDFormat.Bone(); PMXFormat.Bone pmx_bone = pmx.bone_list.bone[bone_index]; result.bone_name = pmx_bone.bone_name; result.parent_bone_index = (ushort)((uint.MaxValue == pmx_bone.parent_bone_index)? ushort.MaxValue: pmx_bone.parent_bone_index); result.tail_pos_bone_index = ushort.MaxValue; #if false //PMD側 0:回転 1:回転と移動 2:IK 3:不明 4:IK影響下 5:回転影響下 6:IK接続先 7:非表示 8:捻り 9:回転運動 result.bone_type = pmx_bone.bone_flag;
private PMDFormat.Bone ReadBone() { PMDFormat.Bone result = new PMDFormat.Bone(); result.bone_name = ConvertByteToString(binary_reader_.ReadBytes(20), ""); result.parent_bone_index = binary_reader_.ReadUInt16(); result.tail_pos_bone_index = binary_reader_.ReadUInt16(); result.bone_type = binary_reader_.ReadByte(); result.ik_parent_bone_index = binary_reader_.ReadUInt16(); result.bone_head_pos = ReadSinglesToVector3(binary_reader_); return(result); }
private PMDFormat.Bone ReadBone() { PMDFormat.Bone result = new PMDFormat.Bone(); result.bone_name = ConvertByteToString(binary_reader_.ReadBytes(20), ""); result.parent_bone_index = binary_reader_.ReadUInt16(); result.tail_pos_bone_index = binary_reader_.ReadUInt16(); result.bone_type = binary_reader_.ReadByte(); result.ik_parent_bone_index = binary_reader_.ReadUInt16(); result.bone_head_pos = ReadSinglesToVector3(binary_reader_); return result; }