internal override void 読み込む(Stream fs, PMXヘッダ header) { 関連剛体Aのインデックス = ParserHelper.get_Index(fs, header.剛体インデックスサイズ); 関連剛体Bのインデックス = ParserHelper.get_Index(fs, header.剛体インデックスサイズ); 位置 = ParserHelper.get_Float3(fs); 回転 = ParserHelper.get_Float3(fs); 移動制限の下限 = ParserHelper.get_Float3(fs); 移動制限の上限 = ParserHelper.get_Float3(fs); 回転制限の下限 = ParserHelper.get_Float3(fs); 回転制限の上限 = ParserHelper.get_Float3(fs); ParserHelper.get_Float3(fs); //6DOF は、 回転・平行移動バネ定数が無効なので読み取ってシーク ParserHelper.get_Float3(fs); }
/// <summary> /// 指定されたストリームから読み込む。 /// </summary> internal override void 読み込む(Stream fs, PMXヘッダ header) { 関連剛体Aのインデックス = ParserHelper.get_Index(fs, header.剛体インデックスサイズ); 関連剛体Bのインデックス = ParserHelper.get_Index(fs, header.剛体インデックスサイズ); 位置 = ParserHelper.get_Float3(fs); 回転rad = ParserHelper.get_Float3(fs); ParserHelper.get_Float3(fs); // 使わないフィールドをスキップ ParserHelper.get_Float3(fs); ParserHelper.get_Float3(fs); ParserHelper.get_Float3(fs); ParserHelper.get_Float3(fs); ParserHelper.get_Float3(fs); }
/// <summary> /// 指定されたストリームから読み込む。 /// </summary> internal static 材質モーフオフセット 読み込む(FileStream fs, PMXヘッダ header) { var offset = new 材質モーフオフセット(); offset.モーフ種類 = モーフ種類.材質; offset.材質インデックス = ParserHelper.get_Index(fs, header.材質インデックスサイズ); offset.オフセット演算形式 = ParserHelper.get_Byte(fs); offset.拡散色 = ParserHelper.get_Float4(fs); offset.反射色 = ParserHelper.get_Float3(fs); offset.反射強度 = ParserHelper.get_Float(fs); offset.環境色 = ParserHelper.get_Float3(fs); offset.エッジ色 = ParserHelper.get_Float4(fs); offset.エッジサイズ = ParserHelper.get_Float(fs); offset.テクスチャ係数 = ParserHelper.get_Float4(fs); offset.スフィアテクスチャ係数 = ParserHelper.get_Float4(fs); offset.Toonテクスチャ係数 = ParserHelper.get_Float4(fs); return(offset); }
/// <summary> /// 指定されたストリームから読み込む。 /// </summary> internal static ジョイントパラメータ 読み込む(Stream fs, PMXヘッダ header, ジョイント.ジョイント種別 type) { switch (type) { // PMX 2.0 case ジョイント.ジョイント種別.ばね付き6DOF: var sp6 = new ばね付き6DOFジョイントパラメータ(); sp6.読み込む(fs, header); return(sp6); // PMX 2.1 case ジョイント.ジョイント種別.基本6DOF: case ジョイント.ジョイント種別.P2P: case ジョイント.ジョイント種別.円錐回転: case ジョイント.ジョイント種別.スライダー: case ジョイント.ジョイント種別.ヒンジ: throw new NotSupportedException("PMX2.1 以降には未対応です。"); // todo: これらの実装 default: throw new NotSupportedException(); } }
/// <summary> /// 指定されたストリームから読み込む。 /// </summary> internal override void 読み込む(Stream fs, PMXヘッダ header) { 関連剛体Aのインデックス = ParserHelper.get_Index(fs, header.剛体インデックスサイズ); 関連剛体Bのインデックス = ParserHelper.get_Index(fs, header.剛体インデックスサイズ); 位置 = ParserHelper.get_Float3(fs); 回転rad = ParserHelper.get_Float3(fs); Vector3 moveLimitationMin = ParserHelper.get_Float3(fs); Vector3 moveLimitationMax = ParserHelper.get_Float3(fs); Vector3 rotationLimitationMin = ParserHelper.get_Float3(fs); Vector3 rotationLimitationMax = ParserHelper.get_Float3(fs); Vector3 springMoveCoefficient = ParserHelper.get_Float3(fs); Vector3 springRotationCoefficient = ParserHelper.get_Float3(fs); Low = rotationLimitationMin.X; High = rotationLimitationMax.X; SoftNess = springMoveCoefficient.X; BiasFactor = springMoveCoefficient.Y; RelaxationFactor = springMoveCoefficient.Z; MotorEnabled = Math.Abs(springRotationCoefficient.X - 1) < 0.3f; // floatなので誤差防止のため(こんなに大きくいらないけど。) TargetVelocity = springRotationCoefficient.Y; MaxMotorImpulse = springRotationCoefficient.Z; }
/// <summary> /// 指定されたストリームから読み込む。(派生クラスで実装のこと。) /// </summary> internal abstract void 読み込む(Stream fs, PMXヘッダ header);