yukiny0811/swifty-creatives
__Creative coding framework for Swift.__
AI Documentation (Q&A)
https://chatgpt.com/g/g-67a4bd5b2f6c81918311ea49989be5d5-swifty-creatives-q-a
Requirements
- Swift5.9
Supported Platforms
- macOS v14
- iOS v17
- visionOS v1
- tvOS v17
Key Features
Processing-like Syntax
You can easily create your graphics, using Swift Programming Language with the intuitive essence of Processing. I like how ``push()` and `pop()`` became super simple using Swift's trailing closure.
import SwiftyCreatives
final class MySketch: Sketch {
override func draw(encoder: SCEncoder) {
let count = 20
for i in 0..<count {
color(0.75, Float(i) / 40, 1, 0.5)
push {
rotateY(Float.pi * 2 / Float(count) * Float(i))
translate(10, 0, 0)
box(0, 0, 0, 1, 1, 1)
}
}
}
}
struct ContentView: View {
var body: some View {
SketchView(MySketch())
}
}[スクリーンショット 2024-02-04 5 38 56]
Apple Vision Pro - Immersive Space
Supports visionOS! You can dive in to your sketch with Immersive Space rendering!
ImmersiveSpace(id: "ImmersiveSpace") {
CompositorLayer(configuration: ContentStageConfiguration()) { layerRenderer in
let renderer = RendererBase.BlendMode.normalBlend.getRenderer(sketch: SampleSketch(), layerRenderer: layerRenderer)
renderer.startRenderLoop()
}
}[ddd]
xib to 3D Space!
Create UIView with xib, and place it in 3D scene! UIButton can be connected with IBAction, and can be tapped in 3d space.
[outout]
Installation
Use Swift Package Manager.
dependencies: [
.package(url: "https://github.com/yukiny0811/swifty-creatives.git", branch: "main")
].product(name: "SwiftyCreatives", package: "swifty-creatives")Features
- [x] Geometries
- [x] Rectangle - [x] Circle - [x] Box - [x] Triangle - [x] Line - [x] BoldLine - [x] 3D Model (obj) - [x] Image - [x] Text - [x] 3D Text - [x] UIView Object (3d view created from xib, with interactive button) - [x] Mesh - [x] Vertex Buffer - [x] SVG
- [x] Geometries with Hit Test (you can click or hover on it)
- [x] HitTestableRect - [x] HitTestableBox - [x] HitTestableImg
- [x] Effects
- [x] Color - [x] Fog - [x] Bloom - [x] Post Process (you can create your own)
- [x] Transforms
- [x] Translate - [x] Rotate - [x] Scale - [x] Push & Pop
- [x] Rendering
- [x] Normal rendering with depth test - [x] Add blend rendering - [x] Transparent rendering with depth test
- [x] Animation
- [x] SCAnimatable property wrapper for animations
- [x] Audio
- [x] Audio Input - [x] FFT
- [x] Camera
- [x] Perspective Camera - [x] Orthographic Camera - [x] Customizable fov
- [x] View
- [x] SwiftUI View - [x] UIKit View - [x] visionOS Immersive Space
- [x] Others
- [x] Creating original geomery class - [x] Font Rendering
Events
open func setupCamera(camera: MainCamera) {}
open func preProcess(commandBuffer: MTLCommandBuffer) {}
open func update(camera: MainCamera) {}
open func draw(encoder: SCEncoder) {}
open func afterCommit(texture: MTLTexture?) {}
open func postProcess(texture: MTLTexture, commandBuffer: MTLCommandBuffer) {}
#if os(macOS)
open func mouseMoved(camera: MainCamera, location: f2) {}
open func mouseDown(camera: MainCamera, location: f2) {}
open func mouseDragged(camera: MainCamera, location: f2) {}
open func mouseUp(camera: MainCamera, location: f2) {}
open func mouseEntered(camera: MainCamera, location: f2) {}
open func mouseExited(camera: MainCamera, location: f2) {}
open func keyDown(with event: NSEvent, camera: MainCamera, viewFrame: CGRect) {}
open func keyUp(with event: NSEvent, camera: MainCamera, viewFrame: CGRect) {}
open func viewWillStartLiveResize(camera: MainCamera, viewFrame: CGRect) {}
open func resize(withOldSuperviewSize oldSize: NSSize, camera: MainCamera, viewFrame: CGRect) {}
open func viewDidEndLiveResize(camera: MainCamera, viewFrame: CGRect) {}
open func scrollWheel(with event: NSEvent, camera: MainCamera, viewFrame: CGRect) {}
#endif
#if os(iOS)
open func onScroll(delta: CGPoint, camera: MainCamera, view: UIView, gestureRecognizer: UIPanGestureRecognizer) {}
open func touchesBegan(camera: MainCamera, touchLocations: [f2]) {}
open func touchesMoved(camera: MainCamera, touchLocations: [f2]) {}
open func touchesEnded(camera: MainCamera, touchLocations: [f2]) {}
open func touchesCancelled(camera: MainCamera, touchLocations: [f2]) {}
#endifOther Examples
[ExampleMacOSApp 2023年-02月-24日 17 11 06]
[CheckMacOS 2023年-03月-01日 6 46 57]
[QuickTime Player - 画面収録 2023-02-10 1 53 14 mov 2023年-02月-10日 2 55 14]
[stable fluids]
Credits
- swifty-creatives library is created by Yuki Kuwashima
- twitter: @yukiny_sfc
Package Metadata
Repository: yukiny0811/swifty-creatives
Default branch: main
README: README.md