Пример #1
0
        public static matrix4x4 pointAtMatrix(vector pos, vector target, vector up)
        {
            // Calculate new forward direction
            vector newForward = target - pos;

            newForward = newForward.normalize();

            // Calculate new Up direction
            vector a     = newForward * vector.dot(newForward, up);
            vector newUp = up - a;

            newUp = newUp.normalize();

            // New Right direction is easy, its just cross product
            vector newRight = vector.cross(newUp, newForward);

            // Construct Dimensioning and Translation Matrix
            matrix4x4 matrix = new matrix4x4();

            matrix.m[0, 0] = newRight.x; matrix.m[0, 1] = newRight.y; matrix.m[0, 2] = newRight.z; matrix.m[0, 3] = 0.0f;
            matrix.m[1, 0] = newUp.x; matrix.m[1, 1] = newUp.y; matrix.m[1, 2] = newUp.z; matrix.m[1, 3] = 0.0f;
            matrix.m[2, 0] = newForward.x; matrix.m[2, 1] = newForward.y; matrix.m[2, 2] = newForward.z; matrix.m[2, 3] = 0.0f;
            matrix.m[3, 0] = pos.x; matrix.m[3, 1] = pos.y; matrix.m[3, 2] = pos.z; matrix.m[3, 3] = 1.0f;
            return(matrix);
        }
Пример #2
0
        public static matrix4x4 identityMatrix()
        {
            matrix4x4 matrix = new matrix4x4();

            matrix.m[0, 0] = 1.0f;
            matrix.m[1, 1] = 1.0f;
            matrix.m[2, 2] = 1.0f;
            matrix.m[3, 3] = 1.0f;
            return(matrix);
        }
Пример #3
0
        public static matrix4x4 RotationZ(float fAngleRad)
        {
            matrix4x4 matrix = new matrix4x4();

            matrix.m[0, 0] = MathF.Cos(fAngleRad);
            matrix.m[0, 1] = MathF.Sin(fAngleRad);
            matrix.m[1, 0] = -MathF.Sin(fAngleRad);
            matrix.m[1, 1] = MathF.Cos(fAngleRad);
            matrix.m[2, 2] = 1.0f;
            matrix.m[3, 3] = 1.0f;
            return(matrix);
        }
Пример #4
0
        public static matrix4x4 translationMatrix(vector v)
        {
            matrix4x4 matrix = new matrix4x4();

            matrix.m[0, 0] = 1.0f;
            matrix.m[1, 1] = 1.0f;
            matrix.m[2, 2] = 1.0f;
            matrix.m[3, 3] = 1.0f;
            matrix.m[3, 0] = v.x;
            matrix.m[3, 1] = v.y;
            matrix.m[3, 2] = v.z;
            return(matrix);
        }
Пример #5
0
        public static matrix4x4 projectionMatrix()
        {
            matrix4x4 m = new matrix4x4();

            m.m[0, 0] = settings.ratio * settings.fov;
            m.m[1, 1] = settings.fov;
            m.m[2, 2] = settings.zFar / (settings.zFar - settings.zNear);
            m.m[3, 2] = (-settings.zFar * settings.zNear) / (settings.zFar - settings.zNear);
            m.m[2, 3] = 1.0f;
            m.m[3, 3] = 0.0f;

            return(m);
        }
Пример #6
0
        public static matrix4x4 quickInverseMatrix(matrix4x4 m)
        {
            matrix4x4 matrix = new matrix4x4();

            matrix.m[0, 0] = m.m[0, 0]; matrix.m[0, 1] = m.m[1, 0]; matrix.m[0, 2] = m.m[2, 0]; matrix.m[0, 3] = 0.0f;
            matrix.m[1, 0] = m.m[0, 1]; matrix.m[1, 1] = m.m[1, 1]; matrix.m[1, 2] = m.m[2, 1]; matrix.m[1, 3] = 0.0f;
            matrix.m[2, 0] = m.m[0, 2]; matrix.m[2, 1] = m.m[1, 2]; matrix.m[2, 2] = m.m[2, 2]; matrix.m[2, 3] = 0.0f;
            matrix.m[3, 0] = -(m.m[3, 0] * matrix.m[0, 0] + m.m[3, 1] * matrix.m[1, 0] + m.m[3, 2] * matrix.m[2, 0]);
            matrix.m[3, 1] = -(m.m[3, 0] * matrix.m[0, 1] + m.m[3, 1] * matrix.m[1, 1] + m.m[3, 2] * matrix.m[2, 1]);
            matrix.m[3, 2] = -(m.m[3, 0] * matrix.m[0, 2] + m.m[3, 1] * matrix.m[1, 2] + m.m[3, 2] * matrix.m[2, 2]);
            matrix.m[3, 3] = 1.0f;
            return(matrix);
        }
Пример #7
0
        public static matrix4x4 operator *(matrix4x4 m1, matrix4x4 m2)
        {
            matrix4x4 matrix = new matrix4x4();

            for (int c = 0; c < 4; c++)
            {
                for (int r = 0; r < 4; r++)
                {
                    matrix.m[r, c] = m1.m[r, 0] * m2.m[0, c] + m1.m[r, 1] * m2.m[1, c] + m1.m[r, 2] * m2.m[2, c] + m1.m[r, 3] * m2.m[3, c];
                }
            }
            return(matrix);
        }