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))); }
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(); }
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(); }
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(); }
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(); }
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(); }
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 ); }
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 ); }
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 ); }
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)) ); }
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)) ); }
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)) ); }
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 ); }
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)); }
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 ); }
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 ); }
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)) ); }
public static void OneTest() { Assert.That(() => Vector4.One, Is.EqualTo(Vector4.Create(1.0f, 1.0f, 1.0f, 1.0f)) ); }
public static void UnitZTest() { Assert.That(() => Vector4.UnitZ, Is.EqualTo(Vector4.Create(0.0f, 0.0f, 1.0f, 0.0f)) ); }
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)) ); }
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)) ); }
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) ); }
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)) ); }
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)) ); }
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)) ); }
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)) ); }
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)) ); }
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)) ); }
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)) ); }
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)) ); }