コード例 #1
0
    private uint CastIntRead(BinaryReader bin, PMXFormat.Header.IndexSize index_size)
    {
        uint result = 0;

        switch (index_size)
        {
        case PMXFormat.Header.IndexSize.Byte1:
            result = (uint)binary_reader_.ReadByte();
            if (byte.MaxValue == result)
            {
                result = uint.MaxValue;
            }
            break;

        case PMXFormat.Header.IndexSize.Byte2:
            result = (uint)binary_reader_.ReadUInt16();
            if (ushort.MaxValue == result)
            {
                result = uint.MaxValue;
            }
            break;

        case PMXFormat.Header.IndexSize.Byte4:
            result = binary_reader_.ReadUInt32();
            break;

        default:
            throw new System.ArgumentOutOfRangeException();
        }
        return(result);
    }
コード例 #2
0
 private PMXFormat.DisplayElement ReadDisplayElement()
 {
     PMXFormat.DisplayElement result = new PMXFormat.DisplayElement();
     result.element_target = binary_reader_.ReadByte();
     PMXFormat.Header.IndexSize element_target_index_size = ((result.element_target == 0) ? format_.header.boneIndexSize : format_.header.morphIndexSize);
     result.element_target_index = CastIntRead(binary_reader_, element_target_index_size);
     return(result);
 }
コード例 #3
0
 private PMXFormat.Material ReadMaterial()
 {
     PMXFormat.Material result = new PMXFormat.Material();
     result.name                  = ReadString();
     result.english_name          = ReadString();
     result.diffuse_color         = ReadSinglesToColor(binary_reader_);    // dr, dg, db, da // 減衰色
     result.specular_color        = ReadSinglesToColor(binary_reader_, 1); // sr, sg, sb // 光沢色
     result.specularity           = binary_reader_.ReadSingle();
     result.ambient_color         = ReadSinglesToColor(binary_reader_, 1); // mr, mg, mb // 環境色(ambient)
     result.flag                  = (PMXFormat.Material.Flag)binary_reader_.ReadByte();
     result.edge_color            = ReadSinglesToColor(binary_reader_);    // r, g, b, a
     result.edge_size             = binary_reader_.ReadSingle();
     result.usually_texture_index = CastIntRead(binary_reader_, format_.header.textureIndexSize);
     result.sphere_texture_index  = CastIntRead(binary_reader_, format_.header.textureIndexSize);
     result.sphere_mode           = (PMXFormat.Material.SphereMode)binary_reader_.ReadByte();
     result.common_toon           = binary_reader_.ReadByte();
     PMXFormat.Header.IndexSize texture_index_size = ((result.common_toon == 0)? format_.header.textureIndexSize: PMXFormat.Header.IndexSize.Byte1);
     result.toon_texture_index = CastIntRead(binary_reader_, texture_index_size);
     result.memo            = ReadString();
     result.face_vert_count = binary_reader_.ReadUInt32();         // 面頂点数 // インデックスに変換する場合は、材質0から順に加算
     return(result);
 }