コード例 #1
0
    public Matrix(float amount, MatrixInitializationType type)
    {
        _rowCount    = 4;
        _columnCount = 4;
        _values      = new float[16];
        var cos = Mathf.Cos(amount);
        var sin = Mathf.Sin(amount);

        switch (type)
        {
        case MatrixInitializationType.RotateXVector:
            _values[0] = 1;

            _values[5]  = cos;
            _values[6]  = -sin;
            _values[9]  = sin;
            _values[10] = cos;
            break;

        case MatrixInitializationType.RotateYVector:
            _values[5] = 1;

            _values[0]  = cos;
            _values[2]  = sin;
            _values[8]  = -sin;
            _values[10] = cos;
            break;

        case MatrixInitializationType.RotateZVector:
            _values[10] = 1;

            _values[0] = cos;
            _values[1] = -sin;
            _values[4] = sin;
            _values[5] = cos;
            break;

        case MatrixInitializationType.ShearVector:
            _values[0]  = 1;
            _values[5]  = 1;
            _values[10] = 1;
            _values[15] = 1;

            _values[1] = amount;
            break;

        case MatrixInitializationType.ReflectionVector:
            _values[0]  = -1;
            _values[5]  = 1;
            _values[10] = 1;
            _values[15] = 1;
            break;
        }
    }
コード例 #2
0
    public Matrix(Coordinate coordinate, MatrixInitializationType type)
    {
        _rowCount    = 4;
        _columnCount = 4;
        _values      = new float[16];
        switch (type)
        {
        case MatrixInitializationType.TranslateVector:
            _values[0]  = 1;
            _values[5]  = 1;
            _values[10] = 1;

            _values[3]  = coordinate.X;
            _values[7]  = coordinate.Y;
            _values[11] = coordinate.Z;
            _values[15] = coordinate.W;
            break;

        case MatrixInitializationType.ScaleVector:
            _values[0]  = coordinate.X;
            _values[5]  = coordinate.Y;
            _values[10] = coordinate.Z;
            _values[15] = coordinate.W;
            break;

        case MatrixInitializationType.QuaternionVector:
            _values[0] = 1 - 2 * Mathf.Pow(coordinate.Y, 2) - 2 * Mathf.Pow(coordinate.Z, 2);
            _values[1] = 2 * coordinate.X * coordinate.Y - 2 * coordinate.W * coordinate.Z;
            _values[2] = 2 * coordinate.X * coordinate.Z + 2 * coordinate.W * coordinate.Y;

            _values[4] = 2 * coordinate.X * coordinate.Y + 2 * coordinate.W * coordinate.Z;
            _values[5] = 1 - 2 * Mathf.Pow(coordinate.X, 2) - 2 * Mathf.Pow(coordinate.Z, 2);
            _values[6] = 2 * coordinate.Y * coordinate.Z - 2 * coordinate.W * coordinate.X;

            _values[8]  = 2 * coordinate.X * coordinate.Z - 2 * coordinate.W * coordinate.Y;
            _values[9]  = 2 * coordinate.Y * coordinate.Z + 2 * coordinate.W * coordinate.X;
            _values[10] = 1 - 2 * Mathf.Pow(coordinate.X, 2) - 2 * Mathf.Pow(coordinate.Y, 2);

            _values[15] = 1;
            break;
        }
    }