Ejemplo n.º 1
0
    public static void CreateTest()
    {
        var value = Matrix4x4.Zero;

        Assert.That(() => value.X, Is.EqualTo(Vector4.Zero));
        Assert.That(() => value.Y, Is.EqualTo(Vector4.Zero));
        Assert.That(() => value.Z, Is.EqualTo(Vector4.Zero));
        Assert.That(() => value.W, Is.EqualTo(Vector4.Zero));

        value = Matrix4x4.Create(
            Vector128.Create(00.0f, 01.0f, 02.0f, 03.0f),
            Vector128.Create(04.0f, 05.0f, 06.0f, 07.0f),
            Vector128.Create(08.0f, 09.0f, 10.0f, 11.0f),
            Vector128.Create(12.0f, 13.0f, 14.0f, 15.0f)
            );

        Assert.That(() => value.X, Is.EqualTo(Vector4.Create(00.0f, 01.0f, 02.0f, 03.0f)));
        Assert.That(() => value.Y, Is.EqualTo(Vector4.Create(04.0f, 05.0f, 06.0f, 07.0f)));
        Assert.That(() => value.Z, Is.EqualTo(Vector4.Create(08.0f, 09.0f, 10.0f, 11.0f)));
        Assert.That(() => value.W, Is.EqualTo(Vector4.Create(12.0f, 13.0f, 14.0f, 15.0f)));

        value = Matrix4x4.Create(new SysMatrix4x4(
                                     16.0f, 17.0f, 18.0f, 19.0f,
                                     20.0f, 21.0f, 22.0f, 23.0f,
                                     24.0f, 25.0f, 26.0f, 27.0f,
                                     28.0f, 29.0f, 30.0f, 31.0f
                                     ));

        Assert.That(() => value.X, Is.EqualTo(Vector4.Create(16.0f, 17.0f, 18.0f, 19.0f)));
        Assert.That(() => value.Y, Is.EqualTo(Vector4.Create(20.0f, 21.0f, 22.0f, 23.0f)));
        Assert.That(() => value.Z, Is.EqualTo(Vector4.Create(24.0f, 25.0f, 26.0f, 27.0f)));
        Assert.That(() => value.W, Is.EqualTo(Vector4.Create(28.0f, 29.0f, 30.0f, 31.0f)));
    }
Ejemplo n.º 2
0
    protected override unsafe void Update(TimeSpan delta)
    {
        const float TranslationSpeed = MathF.PI;

        var radians = _trianglePrimitiveTranslationAngle;

        {
            radians += (float)(TranslationSpeed * delta.TotalSeconds);
            radians %= MathF.Tau;
        }
        _trianglePrimitiveTranslationAngle = radians;

        var x = 0.5f * MathF.Cos(radians);
        var y = 0.5f * MathF.Sin(radians);

        var constantBufferView = _trianglePrimitive.PipelineDescriptorSet !.ResourceViews[1].As <GraphicsBufferView>();
        var constantBufferSpan = constantBufferView.Map <Matrix4x4>();

        {
            // Shaders take transposed matrices, so we want to set X.W
            constantBufferSpan[0] = Matrix4x4.Create(
                Vector4.Create(1.0f, 0.0f, 0.0f, x),
                Vector4.Create(0.0f, 1.0f, 0.0f, y),
                Vector4.Create(0.0f, 0.0f, 1.0f, 0),
                Vector4.UnitW
                );
        }
        constantBufferView.UnmapAndWrite();
    }
Ejemplo n.º 3
0
    protected override unsafe void Update(TimeSpan delta)
    {
        const float TranslationSpeed = 1.0f;
        const float OffsetBounds     = 1.25f;

        var trianglePrimitiveTranslationX = _trianglePrimitiveTranslationX;

        {
            trianglePrimitiveTranslationX += (float)(TranslationSpeed * delta.TotalSeconds);

            if (trianglePrimitiveTranslationX > OffsetBounds)
            {
                trianglePrimitiveTranslationX = -OffsetBounds;
            }
        }
        _trianglePrimitiveTranslationX = trianglePrimitiveTranslationX;

        var constantBufferView = _trianglePrimitive.PipelineDescriptorSet !.ResourceViews[1].As <GraphicsBufferView>();
        var constantBufferSpan = constantBufferView.Map <Matrix4x4>();

        {
            // Shaders take transposed matrices, so we want to set X.W
            constantBufferSpan[0]   = Matrix4x4.Identity;
            constantBufferSpan[0].X = Vector4.Create(1.0f, 0.0f, 0.0f, trianglePrimitiveTranslationX);
        }
        constantBufferView.UnmapAndWrite();
    }
Ejemplo n.º 4
0
    protected override unsafe void Update(TimeSpan delta)
    {
        const float RotationSpeed = 0.5f;

        var radians = _texturePosition;

        {
            radians += (float)(RotationSpeed * delta.TotalSeconds);
            radians %= MathF.Tau;
        }
        _texturePosition = radians;

        var sin = MathF.Sin(radians);
        var cos = MathF.Cos(radians);

        var constantBufferView = _sierpinskiPrimitive.PipelineDescriptorSet !.ResourceViews[1].As <GraphicsBufferView>();
        var constantBufferSpan = constantBufferView.Map <Matrix4x4>();

        {
            // Shaders take transposed matrices, so we want to mirror along the diagonal
            constantBufferSpan[0] = Matrix4x4.Create(
                Vector4.Create(+cos, 0.0f, -sin, 0.0f),
                Vector4.UnitY,
                Vector4.Create(+sin, 0.0f, +cos, 0.0f),
                Vector4.UnitW
                );
        }
        constantBufferView.UnmapAndWrite();
    }
Ejemplo n.º 5
0
    protected override unsafe void Update(TimeSpan delta)
    {
        var surface      = RenderPass.Surface;
        var scale255_256 = 255f / 256f;
        var aspectRatio  = surface.PixelWidth / surface.PixelHeight;
        var scaleX       = scale255_256;
        var scaleY       = scale255_256 / aspectRatio;
        var scaleZ       = scale255_256;

        const float TranslationSpeed = MathF.PI;

        var radians = _texturePosition;

        {
            radians += (float)(TranslationSpeed * delta.TotalSeconds);
            radians %= MathF.Tau;
        }
        _texturePosition = radians;
        var z = scaleZ * (0.5f + (0.5f * MathF.Cos(radians)));

        var constantBufferView = _quadPrimitive.PipelineDescriptorSet !.ResourceViews[1].As <GraphicsBufferView>();
        var constantBufferSpan = constantBufferView.Map <Matrix4x4>();

        {
            // Shaders take transposed matrices, so we want to set X.W
            constantBufferSpan[0] = Matrix4x4.Create(
                Vector4.Create(scaleX, 0.0f, 0.0f, 0.5f), // +0.5 since the input coordinates are in range [-.5, .5]  but output needs to be [0, 1]
                Vector4.Create(0.0f, scaleY, 0.0f, 0.5f), // +0.5 since the input coordinates are in range [-.5, .5]  but output needs to be [0, 1]
                Vector4.Create(0.0f, 0.0f, 1.0f, z),
                Vector4.UnitW
                );
        }
        constantBufferView.UnmapAndWrite();
    }
Ejemplo n.º 6
0
    protected override unsafe void Update(TimeSpan delta)
    {
        const float TranslationSpeed = 0.05f;

        var dydz = _texturePosition;

        {
            dydz += (float)(TranslationSpeed * delta.TotalSeconds);
            dydz %= 1.0f;
        }
        _texturePosition = dydz;

        var constantBufferView = _quadPrimitive.PipelineDescriptorSet !.ResourceViews[1].As <GraphicsBufferView>();
        var constantBufferSpan = constantBufferView.Map <Matrix4x4>();

        {
            // Shaders take transposed matrices, so we want to set X.W
            constantBufferSpan[0] = Matrix4x4.Create(
                Vector4.Create(0.5f, 0.0f, 0.0f, 0.5f),        // *0.5f and +0.5f since the input vertex coordinates are in range [-1, 1]  but output texture coordinates needs to be [0, 1]
                Vector4.Create(0.0f, 0.5f, 0.0f, 0.5f - dydz), // *0.5f and +0.5f as above, -dydz to slide the view of the texture vertically each frame
                Vector4.Create(0.0f, 0.0f, 0.5f, dydz / 5.0f), // +dydz to slide the start of the compositing ray in depth each frame
                Vector4.UnitW
                );
        }
        constantBufferView.UnmapAndWrite();
    }
Ejemplo n.º 7
0
    public static void OpInequalityTest()
    {
        Assert.That(() => Vector4.Create(0.0f, 1.0f, 2.0f, 3.0f) != Vector4.Create(0.0f, 1.0f, 2.0f, 3.0f),
                    Is.False
                    );

        Assert.That(() => Vector4.Create(0.0f, 1.0f, 2.0f, 3.0f) != Vector4.Create(4.0f, 5.0f, 6.0f, 7.0f),
                    Is.True
                    );
    }
Ejemplo n.º 8
0
    public static void IsAnyNaNTest()
    {
        Assert.That(() => Vector4.IsAnyNaN(Vector4.Create(0.0f, 1.0f, 2.0f, float.NaN)),
                    Is.True
                    );

        Assert.That(() => Vector4.IsAnyNaN(Vector4.Create(0.0f, 1.0f, 2.0f, 3.0f)),
                    Is.False
                    );
    }
Ejemplo n.º 9
0
    public static void CompareEqualAllTest()
    {
        Assert.That(() => Vector4.CompareEqualAll(Vector4.Create(0.0f, 1.0f, 2.0f, 3.0f), Vector4.Create(0.0f, 1.0f, 2.0f, 3.0f)),
                    Is.True
                    );

        Assert.That(() => Vector4.CompareEqualAll(Vector4.Create(0.0f, 1.0f, 2.0f, 3.0f), Vector4.Create(4.0f, 5.0f, 6.0f, 7.0f)),
                    Is.False
                    );
    }
Ejemplo n.º 10
0
    public static void OpDivisionTest()
    {
        Assert.That(() => Vector4.Create(0.0f, 1.0f, 2.0f, 3.0f) / Vector4.Create(4.0f, 5.0f, 6.0f, 7.0f),
                    Is.EqualTo(Vector4.Create(0.0f, 0.2f, 0.33333334f, 0.42857143f))
                    );

        Assert.That(() => Vector4.Create(0.0f, 1.0f, 2.0f, 3.0f) / 4.0f,
                    Is.EqualTo(Vector4.Create(0.0f, 0.25f, 0.5f, 0.75f))
                    );
    }
Ejemplo n.º 11
0
    public static void TransformTest()
    {
        Assert.That(() => Vector4.Create(0.0f, 1.0f, 2.0f, 3.0f) * Matrix4x4.Identity,
                    Is.EqualTo(Vector4.Create(0.0f, 1.0f, 2.0f, 3.0f))
                    );

        Assert.That(() => Vector4.Transform(Vector4.Create(0.0f, 1.0f, 2.0f, 3.0f), Matrix4x4.Identity),
                    Is.EqualTo(Vector4.Create(0.0f, 1.0f, 2.0f, 3.0f))
                    );
    }
Ejemplo n.º 12
0
    public static void OpMultiplyTest()
    {
        Assert.That(() => Vector4.Create(0.0f, 1.0f, 2.0f, 3.0f) * Vector4.Create(4.0f, 5.0f, 6.0f, 7.0f),
                    Is.EqualTo(Vector4.Create(0.0f, 5.0f, 12.0f, 21.0f))
                    );

        Assert.That(() => Vector4.Create(0.0f, 1.0f, 2.0f, 3.0f) * 4.0f,
                    Is.EqualTo(Vector4.Create(0.0f, 4.0f, 8.0f, 12.0f))
                    );
    }
Ejemplo n.º 13
0
    public static void IsAnyNaNTest()
    {
        Assert.That(() => {
            var matrix = Matrix4x4.Identity;
            matrix.W   = Vector4.Create(0.0f, 0.0f, 0.0f, float.NaN);
            return(Matrix4x4.IsAnyNaN(matrix));
        }, Is.True);

        Assert.That(() => Matrix4x4.IsAnyNaN(Matrix4x4.Identity),
                    Is.False
                    );
    }
Ejemplo n.º 14
0
    public static void CreateTest()
    {
        var value = Vector4.Zero;

        Assert.That(() => value.X, Is.EqualTo(0.0f));
        Assert.That(() => value.Y, Is.EqualTo(0.0f));
        Assert.That(() => value.Z, Is.EqualTo(0.0f));
        Assert.That(() => value.W, Is.EqualTo(0.0f));

        value = Vector4.Create(0.0f, 1.0f, 2.0f, 3.0f);

        Assert.That(() => value.X, Is.EqualTo(0.0f));
        Assert.That(() => value.Y, Is.EqualTo(1.0f));
        Assert.That(() => value.Z, Is.EqualTo(2.0f));
        Assert.That(() => value.W, Is.EqualTo(3.0f));

        value = Vector4.Create(5.0f);

        Assert.That(() => value.X, Is.EqualTo(5.0f));
        Assert.That(() => value.Y, Is.EqualTo(5.0f));
        Assert.That(() => value.Z, Is.EqualTo(5.0f));
        Assert.That(() => value.W, Is.EqualTo(5.0f));

        value = Vector4.Create(Vector2.Create(6.0f, 7.0f), 8.0f, 9.0f);

        Assert.That(() => value.X, Is.EqualTo(6.0f));
        Assert.That(() => value.Y, Is.EqualTo(7.0f));
        Assert.That(() => value.Z, Is.EqualTo(8.0f));
        Assert.That(() => value.W, Is.EqualTo(9.0f));

        value = Vector4.Create(Vector3.Create(10.0f, 11.0f, 12.0f), 13.0f);

        Assert.That(() => value.X, Is.EqualTo(10.0f));
        Assert.That(() => value.Y, Is.EqualTo(11.0f));
        Assert.That(() => value.Z, Is.EqualTo(12.0f));
        Assert.That(() => value.W, Is.EqualTo(13.0f));

        value = Vector4.Create(new SysVector4(14.0f, 15.0f, 16.0f, 17.0f));

        Assert.That(() => value.X, Is.EqualTo(14.0f));
        Assert.That(() => value.Y, Is.EqualTo(15.0f));
        Assert.That(() => value.Z, Is.EqualTo(16.0f));
        Assert.That(() => value.W, Is.EqualTo(17.0f));

        value = Vector4.Create(Vector128.Create(18.0f, 19.0f, 20.0f, 21.0f));

        Assert.That(() => value.X, Is.EqualTo(18.0f));
        Assert.That(() => value.Y, Is.EqualTo(19.0f));
        Assert.That(() => value.Z, Is.EqualTo(20.0f));
        Assert.That(() => value.W, Is.EqualTo(21.0f));
    }
Ejemplo n.º 15
0
    public static void IsAnyInfinityTest()
    {
        Assert.That(() => Vector4.IsAnyInfinity(Vector4.Create(0.0f, 1.0f, 2.0f, float.PositiveInfinity)),
                    Is.True
                    );

        Assert.That(() => Vector4.IsAnyInfinity(Vector4.Create(0.0f, 1.0f, 2.0f, float.NegativeInfinity)),
                    Is.True
                    );

        Assert.That(() => Vector4.IsAnyInfinity(Vector4.Create(0.0f, 1.0f, 2.0f, 3.0f)),
                    Is.False
                    );
    }
Ejemplo n.º 16
0
    public static void IsAnyInfinityTest()
    {
        Assert.That(() => {
            var matrix = Matrix4x4.Identity;
            matrix.W   = Vector4.Create(0.0f, 0.0f, 0.0f, float.PositiveInfinity);
            return(Matrix4x4.IsAnyInfinity(matrix));
        }, Is.True);

        Assert.That(() => {
            var matrix = Matrix4x4.Identity;
            matrix.W   = Vector4.Create(0.0f, 0.0f, 0.0f, float.NegativeInfinity);
            return(Matrix4x4.IsAnyInfinity(matrix));
        }, Is.True);

        Assert.That(() => Matrix4x4.IsAnyInfinity(Matrix4x4.Identity),
                    Is.False
                    );
    }
Ejemplo n.º 17
0
 public static void MinTest()
 {
     Assert.That(() => Vector4.Min(Vector4.Create(-0.0f, -1.0f, -2.0f, -3.0f), Vector4.Create(-3.0f, -2.0f, -1.0f, -0.0f)),
                 Is.EqualTo(Vector4.Create(-3.0f, -2.0f, -2.0f, -3.0f))
                 );
 }
Ejemplo n.º 18
0
 public static void OneTest()
 {
     Assert.That(() => Vector4.One,
                 Is.EqualTo(Vector4.Create(1.0f, 1.0f, 1.0f, 1.0f))
                 );
 }
Ejemplo n.º 19
0
 public static void UnitZTest()
 {
     Assert.That(() => Vector4.UnitZ,
                 Is.EqualTo(Vector4.Create(0.0f, 0.0f, 1.0f, 0.0f))
                 );
 }
Ejemplo n.º 20
0
 public static void WithWTest()
 {
     Assert.That(() => Vector4.Create(0.0f, 1.0f, 2.0f, 3.0f).WithW(5.0f),
                 Is.EqualTo(Vector4.Create(0.0f, 1.0f, 2.0f, 5.0f))
                 );
 }
Ejemplo n.º 21
0
 public static void AsVector4Test()
 {
     Assert.That(() => Vector4.Create(0.0f, 1.0f, 2.0f, 3.0f).AsSystemVector4(),
                 Is.EqualTo(new SysVector4(0.0f, 1.0f, 2.0f, 3.0f))
                 );
 }
Ejemplo n.º 22
0
 public static void DotProductTest()
 {
     Assert.That(() => Vector4.DotProduct(Vector4.Create(0.0f, 1.0f, 2.0f, 3.0f), Vector4.Create(4.0f, 5.0f, 6.0f, 7.0f)),
                 Is.EqualTo(38.0f)
                 );
 }
Ejemplo n.º 23
0
 public static void OpSubtractionTest()
 {
     Assert.That(() => Vector4.Create(0.0f, 1.0f, 2.0f, 3.0f) - Vector4.Create(4.0f, 5.0f, 6.0f, 7.0f),
                 Is.EqualTo(Vector4.Create(-4.0f, -4.0f, -4.0f, -4.0f))
                 );
 }
Ejemplo n.º 24
0
 public static void OpUnaryPlusTest()
 {
     Assert.That(() => + Vector4.Create(0.0f, 1.0f, 2.0f, 3.0f),
                 Is.EqualTo(Vector4.Create(0.0f, 1.0f, 2.0f, 3.0f))
                 );
 }
Ejemplo n.º 25
0
 public static void MaxTest()
 {
     Assert.That(() => Vector4.Max(Vector4.Create(0.0f, 1.0f, 2.0f, 3.0f), Vector4.Create(3.0f, 2.0f, 1.0f, 0.0f)),
                 Is.EqualTo(Vector4.Create(3.0f, 2.0f, 2.0f, 3.0f))
                 );
 }
Ejemplo n.º 26
0
 public static void OpUnaryNegationTest()
 {
     Assert.That(() => - Vector4.Create(1.0f, 2.0f, 3.0f, 4.0f),
                 Is.EqualTo(Vector4.Create(-1.0f, -2.0f, -3.0f, -4.0f))
                 );
 }
Ejemplo n.º 27
0
 public static void ValueTest()
 {
     Assert.That(() => Vector4.Create(0.0f, 1.0f, 2.0f, 3.0f).Value,
                 Is.EqualTo(Vector128.Create(0.0f, 1.0f, 2.0f, 3.0f))
                 );
 }
Ejemplo n.º 28
0
 public static void NormalizeTest()
 {
     Assert.That(() => Vector4.Normalize(Vector4.Create(0.0f, 1.0f, 2.0f, 3.0f)),
                 Is.EqualTo(Vector4.Create(0.0f, 0.26726124f, 0.5345225f, 0.8017837f))
                 );
 }
Ejemplo n.º 29
0
 public static void SqrtTest()
 {
     Assert.That(() => Vector4.Sqrt(Vector4.Create(0.0f, 1.0f, 2.0f, 3.0f)),
                 Is.EqualTo(Vector4.Create(0.0f, 1.0f, 1.4142135f, 1.7320508f))
                 );
 }
Ejemplo n.º 30
0
 public static void OpAdditionTest()
 {
     Assert.That(() => Vector4.Create(0.0f, 1.0f, 2.0f, 3.0f) + Vector4.Create(4.0f, 5.0f, 6.0f, 7.0f),
                 Is.EqualTo(Vector4.Create(4.0f, 6.0f, 8.0f, 10.0f))
                 );
 }