Exemplo n.º 1
0
        public Matrix4 Multiply(Matrix4 matrix)
        {
            return new Matrix4()
            {
                M11 = M11 * matrix.M11 + M12 * matrix.M21 + M13 * matrix.M31 + M14 * matrix.M41,
                M12 = M11 * matrix.M12 + M12 * matrix.M22 + M13 * matrix.M32 + M14 * matrix.M42,
                M13 = M11 * matrix.M13 + M12 * matrix.M23 + M13 * matrix.M33 + M14 * matrix.M43,
                M14 = M11 * matrix.M14 + M12 * matrix.M24 + M13 * matrix.M34 + M14 * matrix.M44,

                M21 = M21 * matrix.M11 + M22 * matrix.M21 + M23 * matrix.M31 + M24 * matrix.M41,
                M22 = M21 * matrix.M12 + M22 * matrix.M22 + M23 * matrix.M32 + M24 * matrix.M42,
                M23 = M21 * matrix.M13 + M22 * matrix.M23 + M23 * matrix.M33 + M24 * matrix.M43,
                M24 = M21 * matrix.M14 + M22 * matrix.M24 + M23 * matrix.M34 + M24 * matrix.M44,

                M31 = M31 * matrix.M11 + M32 * matrix.M21 + M33 * matrix.M31 + M34 * matrix.M41,
                M32 = M31 * matrix.M12 + M32 * matrix.M22 + M33 * matrix.M32 + M34 * matrix.M42,
                M33 = M31 * matrix.M13 + M32 * matrix.M23 + M33 * matrix.M33 + M34 * matrix.M43,
                M34 = M31 * matrix.M14 + M32 * matrix.M24 + M33 * matrix.M34 + M34 * matrix.M44,

                M41 = M41 * matrix.M11 + M42 * matrix.M21 + M43 * matrix.M31 + M44 * matrix.M41,
                M42 = M41 * matrix.M12 + M42 * matrix.M22 + M43 * matrix.M32 + M44 * matrix.M42,
                M43 = M41 * matrix.M13 + M42 * matrix.M23 + M43 * matrix.M33 + M44 * matrix.M43,
                M44 = M41 * matrix.M14 + M42 * matrix.M24 + M43 * matrix.M34 + M44 * matrix.M44
            };
        }
Exemplo n.º 2
0
        private static void drawScene()
        {
            gl.Viewport(0, 0, viewportWidth, viewportHeight);
            gl.Clear(gl.ColorBufferBit | gl.DepthBufferBit);
            pMatrix = Matrix4.Perspective(45, viewportWidth / viewportHeight, 0.1, 100.0);

            // Draw triangle
            mvMatrix = Matrix4.Translate(-1.5, 0.0, -7.0);
            gl.BindBuffer(gl.ArrayBuffer, triangleVertexPositionBuffer.Buffer);
            gl.VertexAttributePointer(vertexPositionAttribute, triangleVertexPositionBuffer.ItemSize, gl.Float, false, 0, 0);
            setMatrixUniforms();
            gl.DrawArrays(gl.Triangles, 0, triangleVertexPositionBuffer.NumItems);

            // Draw square
            mvMatrix = Matrix4.Translate(1.5, 0.0, -7.0);
            gl.BindBuffer(gl.ArrayBuffer, squareVertexPositionBuffer.Buffer);
            gl.VertexAttributePointer(vertexPositionAttribute, squareVertexPositionBuffer.ItemSize, gl.Float, false, 0, 0);
            setMatrixUniforms();
            gl.DrawArrays(gl.TriangleStrip, 0, squareVertexPositionBuffer.NumItems);
        }
Exemplo n.º 3
0
        private static Matrix4 Frustum(
            double left, double right, double bottom, double top, double near, double far)
        {
            var mtx = new Matrix4();
            var rl = (right - left);
            var tb = (top - bottom);
            var fn = (far - near);
            
            mtx.M11 = (near * 2) / rl;
            mtx.M22 = (near * 2) / tb;
            
            mtx.M31 = (right + left) / rl;
            mtx.M32 = (top + bottom) / tb;
            mtx.M33 = -(far + near) / fn;
            mtx.M34 = -1;

            mtx.M43 = -(far * near * 2) / fn;
            mtx.M44 = 0;
            
            return mtx;
        }