private static PMXFormat.Vertex ConvertVertex(PMDFormat.Vertex pmd_vertex) { PMXFormat.Vertex result = new PMXFormat.Vertex(); result.pos = pmd_vertex.pos; result.normal_vec = pmd_vertex.normal_vec; result.uv = pmd_vertex.uv; result.add_uv = new Vector4[0]; if (100 == pmd_vertex.bone_weight) { //1頂点 PMXFormat.BDEF1 bone_weight = new PMXFormat.BDEF1(); bone_weight.bone1_ref = pmd_vertex.bone_num[0]; result.bone_weight = bone_weight; } else { //2頂点 PMXFormat.BDEF2 bone_weight = new PMXFormat.BDEF2(); bone_weight.bone1_ref = pmd_vertex.bone_num[0]; bone_weight.bone2_ref = pmd_vertex.bone_num[1]; bone_weight.bone1_weight = pmd_vertex.bone_weight / 100.0f; result.bone_weight = bone_weight; } result.edge_magnification = (float)pmd_vertex.edge_flag; return(result); }
private static PMDFormat.Vertex ConvertVertex(PMXFormat pmx, int vertex_index) { PMDFormat.Vertex result = new PMDFormat.Vertex(); PMXFormat.Vertex pmx_vertex = pmx.vertex_list.vertex[vertex_index]; result.pos = pmx_vertex.pos; result.normal_vec = pmx_vertex.normal_vec; result.uv = pmx_vertex.uv; switch (pmx_vertex.bone_weight.method) { case PMXFormat.Vertex.WeightMethod.BDEF1: goto case PMXFormat.Vertex.WeightMethod.BDEF2; case PMXFormat.Vertex.WeightMethod.BDEF2: //BDEF1,BDEF2なら //完全互換 result.bone_num = new ushort[] { (ushort)pmx_vertex.bone_weight.bone1_ref, (ushort)pmx_vertex.bone_weight.bone2_ref }; result.bone_weight = (byte)(pmx_vertex.bone_weight.bone1_weight * 100.0f + 0.5f); break; case PMXFormat.Vertex.WeightMethod.BDEF4: //BDEF4なら //ボーン3,4の情報を捨てる result.bone_num = new ushort[] { (ushort)pmx_vertex.bone_weight.bone1_ref, (ushort)pmx_vertex.bone_weight.bone2_ref }; float bone1_weight = pmx_vertex.bone_weight.bone1_weight / (pmx_vertex.bone_weight.bone1_weight + pmx_vertex.bone_weight.bone2_weight); result.bone_weight = (byte)(bone1_weight * 100.0f + 0.5f); break; case PMXFormat.Vertex.WeightMethod.SDEF: //SDEFなら //SDEFの情報を捨ててBDEF2扱い goto case PMXFormat.Vertex.WeightMethod.BDEF2; case PMXFormat.Vertex.WeightMethod.QDEF: //QDEFなら //BDEF4と同じ対応 goto case PMXFormat.Vertex.WeightMethod.BDEF4; default: throw new System.ArgumentOutOfRangeException(); } result.edge_flag = (byte)((0.5f <= pmx_vertex.edge_magnification)? 1: 0); return(result); }
private PMXFormat.Vertex ReadVertex() { PMXFormat.Vertex result = new PMXFormat.Vertex(); result.pos = ReadSinglesToVector3(binary_reader_); result.normal_vec = ReadSinglesToVector3(binary_reader_); result.uv = ReadSinglesToVector2(binary_reader_); result.add_uv = new Vector4[format_.header.additionalUV]; for (int i = 0; i < format_.header.additionalUV; i++) { result.add_uv[i] = ReadSinglesToVector4(binary_reader_); } PMXFormat.Vertex.WeightMethod weight_method = (PMXFormat.Vertex.WeightMethod)binary_reader_.ReadByte(); switch (weight_method) { case PMXFormat.Vertex.WeightMethod.BDEF1: result.bone_weight = ReadBoneWeightBDEF1(); break; case PMXFormat.Vertex.WeightMethod.BDEF2: result.bone_weight = ReadBoneWeightBDEF2(); break; case PMXFormat.Vertex.WeightMethod.BDEF4: result.bone_weight = ReadBoneWeightBDEF4(); break; case PMXFormat.Vertex.WeightMethod.SDEF: result.bone_weight = ReadBoneWeightSDEF(); break; case PMXFormat.Vertex.WeightMethod.QDEF: result.bone_weight = ReadBoneWeightQDEF(); break; default: result.bone_weight = null; throw new System.FormatException(); } result.edge_magnification = binary_reader_.ReadSingle(); return(result); }
private PMXFormat.Vertex ReadVertex() { PMXFormat.Vertex result = new PMXFormat.Vertex(); result.pos = ReadSinglesToVector3(binary_reader_); result.normal_vec = ReadSinglesToVector3(binary_reader_); result.uv = ReadSinglesToVector2(binary_reader_); result.add_uv = new Vector4[format_.header.additionalUV]; for (int i = 0; i < format_.header.additionalUV; i++) { result.add_uv[i] = ReadSinglesToVector4(binary_reader_); } PMXFormat.Vertex.WeightMethod weight_method = (PMXFormat.Vertex.WeightMethod)binary_reader_.ReadByte(); switch(weight_method) { case PMXFormat.Vertex.WeightMethod.BDEF1: result.bone_weight = ReadBoneWeightBDEF1(); break; case PMXFormat.Vertex.WeightMethod.BDEF2: result.bone_weight = ReadBoneWeightBDEF2(); break; case PMXFormat.Vertex.WeightMethod.BDEF4: result.bone_weight = ReadBoneWeightBDEF4(); break; case PMXFormat.Vertex.WeightMethod.SDEF: result.bone_weight = ReadBoneWeightSDEF(); break; case PMXFormat.Vertex.WeightMethod.QDEF: result.bone_weight = ReadBoneWeightQDEF(); break; default: result.bone_weight = null; throw new System.FormatException(); } result.edge_magnification = binary_reader_.ReadSingle(); return result; }
private static PMXFormat.Vertex ConvertVertex(PMDFormat.Vertex pmd_vertex) { PMXFormat.Vertex result = new PMXFormat.Vertex(); result.pos = pmd_vertex.pos; result.normal_vec = pmd_vertex.normal_vec; result.uv = pmd_vertex.uv; result.add_uv = new Vector4[0]; if (100 == pmd_vertex.bone_weight) { //1頂点 PMXFormat.BDEF1 bone_weight = new PMXFormat.BDEF1(); bone_weight.bone1_ref = pmd_vertex.bone_num[0]; result.bone_weight = bone_weight; } else { //2頂点 PMXFormat.BDEF2 bone_weight = new PMXFormat.BDEF2(); bone_weight.bone1_ref = pmd_vertex.bone_num[0]; bone_weight.bone2_ref = pmd_vertex.bone_num[1]; bone_weight.bone1_weight = pmd_vertex.bone_weight / 100.0f; result.bone_weight = bone_weight; } result.edge_magnification = (float)pmd_vertex.edge_flag; return result; }