SwiftGL 数学库

SwiftGL 是一个 100% 使用 Swift 编写的图形编程库。

要使用它,请在您的 Package.swift 文件中添加依赖项。

let package = Package(
    dependencies: [
        .Package(url: "https://github.com/SwiftGL/Math.git", majorVersion: 2)
    ]
)

然后在你的 Swift 文件中 import SGLMath

入门指南

SwiftGL 数学库实现了 GLSL 4.5 规范中的每个数据类型和运算符。 它包括第 5.1 节中的每个运算符和第 8.1 到 8.7 节中的每个函数。 您甚至可以使用 Swizzle 操作。

Swift 语法和 GLSL 语法自然非常相似。 两种语言中都使用相同的类型和函数,您甚至可能不会注意到它们之间的切换。 这正是这个库的目的。 您在 GLSL 中知道和使用的一切现在都可以在 Swift 中工作。

var myVec = vec4(1, 2, 3, 4)
myVec.ab = vec2(99, 98)
print(myVec) //=> (1, 2, 98, 99)

SwiftGL 数学类型的数组和结构可以直接传递给 OpenGL。 所有类型的二进制格式完全匹配。

let vertices = [vec3](count: 100, repeatedValue: vec3())
glBufferData(target: GL_ARRAY_BUFFER, size: strideof(vec3) * vertices.count,
             data: vertices, usage: GL_STATIC_DRAW)

您可能会发现您有一个标量类型不正确。 在 Swift 中,通常的做法是从旧的类型构造一个新的类型。 这也是你在 GLSL 中做的方式。 来自规范的第 5.1 节:“没有类型转换运算符;而是使用构造函数。”

let f = Float(3.1)
let d = Double(f)
let v = vec3()
let dv = dvec3(v)

用于 C++ 的 glm 库是 OpenGL 最常用的数学库之一。 与 SwiftGL 类似,它实现了 GLSL 规范。 它还提供了额外的函数来支持诸如四元数和相机之类的东西。 SwiftGL 数学模块包含与 glm 兼容的矩阵变换。

let projectionMatrix = mat4.perspective(fov, aspect, clip.near, clip.far)

重新生成 Swizzle.swift

从包的根目录执行: ./.build/x86_64-unknown-linux/debug/swizgen