Ejemplo n.º 1
0
        //determine and load a transformation matrix that manipulates the complex coordinates of the quad.
        private void PrepareInstance(Vector2 mousePositionUnitCoordinates, float mouseWheelDelta, Fractal fractal)
        {
            float   stepPercent          = 1 - (2 * mouseWheelDelta / 100f);
            Vector2 mousePositionComplex = new Vector2(Mathematics.Lerp(mousePositionUnitCoordinates.X, fractal.domain[0].X, fractal.domain[1].X), -Mathematics.Lerp(mousePositionUnitCoordinates.Y, fractal.domain[0].Y, fractal.domain[3].Y));



            Vector2 bottomLeft  = Mathematics.Lerp(stepPercent, mousePositionComplex, fractal.domain[0]);
            Vector2 bottomRight = Mathematics.Lerp(stepPercent, mousePositionComplex, fractal.domain[1]);
            Vector2 topRight    = Mathematics.Lerp(stepPercent, mousePositionComplex, fractal.domain[2]);
            Vector2 topLeft     = Mathematics.Lerp(stepPercent, mousePositionComplex, fractal.domain[3]);

            float xScale = Math.Abs(bottomRight.X - bottomLeft.X);
            float yScale = Math.Abs(topLeft.Y - bottomLeft.Y);

            Matrix4 transformationMatrix = Mathematics.CreateTransformationMatrix(new Vector3(bottomLeft.X, bottomLeft.Y, 0), xScale, yScale);

            mandelbrotShader.LoadTransformationMatrix(transformationMatrix);

            fractal.domain[0] = bottomLeft;
            fractal.domain[1] = bottomRight;
            fractal.domain[2] = topRight;
            fractal.domain[3] = topLeft;
        }