Exemple #1
0
        /// <summary>
        ///     指定されたストリームから読み込む。
        /// </summary>
        internal static ボーンフレーム 読み込む(Stream fs)
        {
            var frame = new ボーンフレーム();

            frame.ボーン名   = ParserHelper.get_Shift_JISString(fs, 15);
            frame.フレーム番号 = ParserHelper.get_DWORD(fs);
            frame.ボーンの位置 = ParserHelper.get_Float3(fs);
            frame.ボーンの回転 = ParserHelper.get_Quaternion(fs);

            // 補間データ[4][4][4]
            frame.補間データ = new byte[4][][];
            for (int i = 0; i < 4; i++)
            {
                frame.補間データ[i] = new byte[4][];
                for (int j = 0; j < 4; j++)
                {
                    frame.補間データ[i][j] = new byte[4];
                    for (int k = 0; k < 4; k++)
                    {
                        frame.補間データ[i][j][k] = ParserHelper.get_Byte(fs);
                    }
                }
            }

            // 補間データからベジェ曲線を生成する。
            // 補間データは、[0][0~3][0~4] のみ使用。
            frame.ベジェ曲線 = new ベジェ曲線[4];
            for (int i = 0; i < 4; i++)
            {
                var curve = new ベジェ曲線()
                {
                    //v0 = new Vector2( 0, 0 ),
                    v1 = new Vector2((float)frame.補間データ[0][0][i] / 128f, (float)frame.補間データ[0][1][i] / 128f),                   // (0,0)側の方向点
                    v2 = new Vector2((float)frame.補間データ[0][2][i] / 128f, (float)frame.補間データ[0][3][i] / 128f),                   // (1,1)側の方向点
                    //v3 = new Vector2( 1, 1 ),
                };
                frame.ベジェ曲線[i] = curve;
            }

            return(frame);
        }
Exemple #2
0
        /// <summary>
        ///     指定されたストリームから読み込む。
        /// </summary>
        internal static カメラフレーム 読み込む(Stream fs)
        {
            var frame = new カメラフレーム();

            frame.フレーム番号 = ParserHelper.get_DWORD(fs);
            frame.距離     = ParserHelper.get_Float(fs);
            frame.位置     = ParserHelper.get_Float3(fs);
            frame.回転     = ParserHelper.get_Float3(fs);
            frame.回転.X   = -frame.回転.X; // カメラの回転量は正負が逆であるため、ここで符号を反転しておく。
            frame.回転.Y   = -frame.回転.Y;
            frame.回転.Z   = -frame.回転.Z;

            frame.補間データ = new byte[6][];
            for (int i = 0; i < 6; i++)
            {
                frame.補間データ[i] = new byte[4];
                for (int j = 0; j < 4; j++)
                {
                    frame.補間データ[i][j] = ParserHelper.get_Byte(fs);
                }
            }

            frame.視野角      = ParserHelper.get_DWORD(fs);
            frame.パースペクティブ = (0 == ParserHelper.get_Byte(fs)) ? true : false;        // 0 が ON で 1 が OFF なので注意

            // 補間データからベジェ曲線を生成する。
            frame.ベジェ曲線 = new ベジェ曲線[6];
            for (int i = 0; i < 6; i++)
            {
                var curve = new ベジェ曲線 {
                    //v0 = new Vector2( 0, 0 ),
                    v1 = new Vector2(frame.補間データ[i][0] / 128f, frame.補間データ[i][1] / 128f),
                    v2 = new Vector2(frame.補間データ[i][2] / 128f, frame.補間データ[i][3] / 128f),
                    //v3 = new Vector2( 1, 1 ),
                };
                frame.ベジェ曲線[i] = curve;
            }

            return(frame);
        }