From d3190dd7e7e9b3591d089aec996e68be1f9ea695 Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Tue, 9 Oct 2018 11:57:35 -0700 Subject: [PATCH] Add color rotation matrix to Parameters --- MetaballsKit/Math.swift | 10 ++++++++++ MetaballsKit/Metaballs.swift | 5 ++--- MetaballsKit/Shaders.metal | 1 + 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/MetaballsKit/Math.swift b/MetaballsKit/Math.swift index ca2e809..0386bea 100644 --- a/MetaballsKit/Math.swift +++ b/MetaballsKit/Math.swift @@ -13,6 +13,7 @@ import simd public typealias Float2 = packed_float2 public typealias Float3 = float3 public typealias Float4 = float4 +public typealias Matrix2x2 = float2x2 public typealias Matrix3x3 = float3x3 public typealias Matrix4x4 = float4x4 @@ -42,6 +43,15 @@ extension Float4 { } } +extension Matrix2x2 { + static func rotation(theta: Float) -> Matrix2x2 { + return self.init(rows: [ + Float2(cos(theta), -sin(theta)), + Float2(sin(theta), cos(theta)), + ]) + } +} + extension Matrix4x4 { /// Create a 4x4 orthographic projection matrix with the provided 6-tuple. /// @see https://en.wikipedia.org/wiki/Orthographic_projection diff --git a/MetaballsKit/Metaballs.swift b/MetaballsKit/Metaballs.swift index b3ee598..a46e2a2 100644 --- a/MetaballsKit/Metaballs.swift +++ b/MetaballsKit/Metaballs.swift @@ -49,6 +49,8 @@ public struct Parameters { public var color2 = Float4() public var color3 = Float4() + public var colorRotation = Matrix2x2(1.0) + public var colorStyle: ColorStyle { get { return ColorStyle(rawValue: _colorStyle)! @@ -234,9 +236,6 @@ public class Field { var r = ball.radius ptr = write(value: &r, to: ptr) ptr = ptr.advanced(by: 4) // Skip 4 bytes to maintain alignment. -// if idx == 0 { -// print("Populated ball \(idx): x:\(ball.position.x), y:\(ball.position.y), r:\(r)") -// } idx += 1 } } diff --git a/MetaballsKit/Shaders.metal b/MetaballsKit/Shaders.metal index 8c09b8b..28b5c47 100644 --- a/MetaballsKit/Shaders.metal +++ b/MetaballsKit/Shaders.metal @@ -44,6 +44,7 @@ typedef struct { float target; float feather; float4 colors[4]; + float2x2 colorRotation; } Parameters; typedef float3 Ball;