SwiftyCreatives
Swift创意编码框架。
直接使用Metal进行渲染。灵感来自Processing。支持visionOS。
要求
- Swift5.9
支持的平台
- macOS v14
- iOS v17
- visionOS v1
- tvOS v17
主要特性
类似Processing的语法
您可以使用Swift编程语言轻松创建图形,同时保留Processing的直观本质。
我喜欢push()
和pop()
使用Swift的尾随闭包变得如此简单。
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())
}
}
Apple Vision Pro - 沉浸式空间
支持visionOS!您可以通过沉浸式空间渲染深入您的草图!
ImmersiveSpace(id: "ImmersiveSpace") {
CompositorLayer(configuration: ContentStageConfiguration()) { layerRenderer in
let renderer = RendererBase.BlendMode.normalBlend.getRenderer(sketch: SampleSketch(), layerRenderer: layerRenderer)
renderer.startRenderLoop()
}
}
xib转3D空间!
使用xib创建UIView,并将其放置在3D场景中!
UIButton可以与IBAction连接,并可以在3D空间中点击。
安装
使用Swift包管理器。
dependencies: [
.package(url: "https://github.com/yukiny0811/swifty-creatives.git", branch: "main")
]
.product(name: "SwiftyCreatives", package: "swifty-creatives")
功能特性
- 几何图形
- 矩形
- 圆形
- 立方体
- 三角形
- 线条
- 粗线条
- 3D模型(obj格式)
- 图像
- 文本
- 3D文本
- UIView对象(从xib创建的3D视图,带有交互式按钮)
- 网格
- 顶点缓冲区
- SVG
- 支持碰撞检测的几何图形(可点击或悬停)
- 可碰撞矩形
- 可碰撞立方体
- 可碰撞图像
- 效果
- 颜色
- 雾效
- 泛光
- 后期处理(可自定义)
- 变换
- 平移
- 旋转
- 缩放
- 压入和弹出
- 渲染
- 带深度测试的普通渲染
- 叠加混合渲染
- 带深度测试的透明渲染
- 动画
- SCAnimatable属性包装器用于动画
- 音频
- 音频输入
- FFT(快速傅里叶变换)
- 相机
- 透视相机
- 正交相机
- 可自定义视场角
- 视图
- SwiftUI视图
- UIKit视图
- visionOS沉浸式空间
- 其他
- 创建原始几何图形类
- 字体渲染
事件
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]) {}
#endif
其他示例
致谢
- swifty-creatives库由Yuki Kuwashima创建
- Twitter: @yukiny_sfc
- [电子邮件](https://github.com/yukiny0811/swifty-creatives/blob/main/yukiny0811@gmail.com