예제 #1
0
        /// <summary>
        /// Specify the scale matrix
        /// </summary>
        /// <param name="vectorScale"></param>
        /// <returns></returns>
        public static Matrix4f Scale(Vec2 vectorScale)
        {
            Matrix4f res = Matrix4f.Identity();

            res.Matrix[0 + 0 * 4] = vectorScale.X;
            res.Matrix[1 + 1 * 4] = vectorScale.Y;
            res.Matrix[2 + 2 * 4] = 1.0f;

            return(res);
        }
예제 #2
0
        /// <summary>
        /// Matrix translation matrix formed from a vectoroffset
        /// </summary>
        /// <param name="VectorOffset"></param>
        /// <returns></returns>
        public static Matrix4f Translate(Vec2 VectorOffset)
        {
            Matrix4f res = Matrix4f.Identity();

            res.Matrix[0 + 3 * 4] = VectorOffset.X;
            res.Matrix[1 + 3 * 4] = VectorOffset.Y;
            res.Matrix[2 + 3 * 4] = 0f;

            return(res);
        }
예제 #3
0
        /// <summary>
        /// Returns a identity matrix
        /// </summary>
        /// <returns></returns>
        public static Matrix4f Identity()
        {
            Matrix4f res = new Matrix4f();

            res.m4f[0 + 0 * 4] = 1.0f;
            res.m4f[1 + 1 * 4] = 1.0f;
            res.m4f[2 + 2 * 4] = 1.0f;
            res.m4f[3 + 3 * 4] = 1.0f;

            return(res);
        }
예제 #4
0
        /// <summary>
        /// Add two matrix together
        /// </summary>
        /// <param name="first"></param>
        /// <param name="second"></param>
        /// <returns></returns>
        public static Matrix4f operator+(Matrix4f first, Matrix4f second)
        {
            Matrix4f res = new Matrix4f();

            for (int i = 0; i < 4 * 4; i++)
            {
                res.Matrix[i] = first.Matrix[i] + second.Matrix[i];
            }

            return(res);
        }
예제 #5
0
        /// <summary>
        /// Returns a orthogonal projection matrix
        /// </summary>
        /// <param name="left"></param>
        /// <param name="right"></param>
        /// <param name="top"></param>
        /// <param name="bottom"></param>
        /// <param name="far"></param>
        /// <param name="near"></param>
        /// <returns></returns>
        public static Matrix4f Orthogonal(float right, float left, float top, float bottom, float far, float near)
        {
            Matrix4f res = Identity();

            res.m4f[0 + 0 * 4] = 2.0f / (right - left);
            res.m4f[1 + 1 * 4] = 2.0f / (top - bottom);
            res.m4f[2 + 2 * 4] = -(2.0f / (far - near));

            res.m4f[0 + 3 * 4] = -((right + left) / (right - left));
            res.m4f[1 + 3 * 4] = -((top + bottom) / (top - bottom));
            res.m4f[2 + 3 * 4] = -((far + near) / (far - near));

            return(res);
        }
예제 #6
0
        /// <summary>
        /// Specify the rotation matrix for z in degrees
        /// </summary>
        /// <param name="angleDegrees"></param>
        /// <returns></returns>
        public static Matrix4f RotateZ(float angleDegrees)
        {
            Matrix4f res = Matrix4f.Identity();

            float rad = angleDegrees * ((float)Math.PI / 180);
            float cos = (float)Math.Cos(rad);
            float sin = (float)Math.Sin(rad);

            res.Matrix[0 + 0 * 4] = cos;
            res.Matrix[0 + 1 * 4] = -sin;
            res.Matrix[1 + 0 * 4] = sin;
            res.Matrix[1 + 1 * 4] = cos;

            return(res);
        }
예제 #7
0
        /// <summary>
        /// Return matrix
        /// </summary>
        /// <param name="first"></param>
        /// <param name="second"></param>
        /// <returns></returns>
        public static Matrix4f operator*(Matrix4f first, Matrix4f second)
        {
            Matrix4f res = new Matrix4f();

            for (int i = 0; i < 4; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    for (int k = 0; k < 4; k++)
                    {
                        res.Matrix[j + i * 4] += first.Matrix[k + i * 4] * second.Matrix[j + k * 4];
                    }
                }
            }

            return(res);
        }