/// <summary> /// 指定されたストリームから読み込む。 /// </summary> internal static 材質 読み込む(FileStream fs, PMXヘッダ header) { var material = new 材質(); material.材質名 = ParserHelper.get_TextBuf(fs, header.エンコード方式); material.材質名_英 = ParserHelper.get_TextBuf(fs, header.エンコード方式); material.拡散色 = ParserHelper.get_Float4(fs); material.反射色 = ParserHelper.get_Float3(fs); material.反射強度 = ParserHelper.get_Float(fs); material.環境色 = ParserHelper.get_Float3(fs); material.描画フラグ = (描画フラグ)ParserHelper.get_Byte(fs); material.エッジ色 = ParserHelper.get_Float4(fs); material.エッジサイズ = ParserHelper.get_Float(fs); material.通常テクスチャの参照インデックス = ParserHelper.get_Index(fs, header.テクスチャインデックスサイズ); material.スフィアテクスチャの参照インデックス = ParserHelper.get_Index(fs, header.テクスチャインデックスサイズ); switch (ParserHelper.get_Byte(fs)) { case 0: material.スフィアモード = スフィアモード.無効; break; case 1: material.スフィアモード = スフィアモード.乗算; break; case 2: material.スフィアモード = スフィアモード.加算; break; case 3: material.スフィアモード = スフィアモード.サブテクスチャ; break; default: throw new InvalidDataException("スフィアモード値が異常です。"); } material.共有Toonフラグ = ParserHelper.get_Byte(fs); material.共有Toonのテクスチャ参照インデックス = material.共有Toonフラグ == 0 ? ParserHelper.get_Index(fs, header.テクスチャインデックスサイズ) : ParserHelper.get_Byte(fs); material.メモ = ParserHelper.get_TextBuf(fs, header.エンコード方式); material.頂点数 = ParserHelper.get_Int(fs); if (material.頂点数 % 3 != 0) { throw new InvalidDataException(); // 3 の倍数じゃなければエラー。 } return(material); }
public static エフェクト用材質情報 作成する(IDrawable drawable, MMDFileParser.PMXModelParser.材質 material) { var info = new エフェクト用材質情報() { 材質名 = material.材質名, 材質名_英 = material.材質名_英, 環境色 = new Vector4(material.環境色, 1f), 拡散色 = material.拡散色, エッジ色 = material.エッジ色, 放射色 = new Vector4(1f), 地面影色 = drawable.地面影色, 反射色 = new Vector4(material.反射色, 1f), 反射係数 = material.反射強度, トゥーン色 = new Vector4(0f), エッジ幅 = material.エッジサイズ, エッジが有効である = material.描画フラグ.HasFlag(描画フラグ.エッジ), 地面影が有効である = material.描画フラグ.HasFlag(描画フラグ.地面影), Line描画を使用する = material.描画フラグ.HasFlag(描画フラグ.Line描画), 乗算差分 = new エフェクト用材質情報(), 加算差分 = new エフェクト用材質情報(), テッセレーション係数 = 1.0f, }; info.初期値 = new エフェクト用材質情報() { 環境色 = new Vector4(material.環境色, 1f), 拡散色 = material.拡散色, エッジ色 = material.エッジ色, 放射色 = new Vector4(1f), 地面影色 = drawable.地面影色, 反射色 = new Vector4(material.反射色, 1f), 反射係数 = material.反射強度, トゥーン色 = new Vector4(0f), エッジ幅 = material.エッジサイズ, }; info._リセットする(); return(info); }