Linearly
グラフィックスプログラミングのための線形代数関数ライブラリ
イミュータブルなデータ構造
すべてのデータ型はイミュータブルかつreadonlyです。
TypeScriptフレンドリー
ライブラリ全体が型付けされており、TypeScriptとの相性が良いです。
さまざまな環境との互換性
APIはglMatrix、GLSL、Unity、HoudiniのVexのスーパーセットになっています。
Linearlyは、線形代数やグラフィックスプログラミングに関わるユーティリティ関数を集めたライブラリです。glMatrixに強くインスパイアされていますが、関数型プログラミングのスタイルとイミュータブルなデータ構造を採用しています。
import {mat2d, vec3} from 'linearly'
// glMatrixと違って、第一引数にレシーバーとなる行列を渡す必要がありません
const p0 = vec2.add([1, 2], [3, 4])
const p1 = vec2.transformMat2d(p0, mat2d.fromRotation(scalar.rad(45)))
const dir = vec3.normalize([2, 1, 3])
const right = vec3.cross(dir, [0, 1, 0])
const c = vec3.scale(right, 3)
// Linearlyの値はただの1次元配列なので、
// ベクトルの初期化はどちらの方法でもOKです
const a: vec2 = [1, 2]
const b = vec2.of(1, 2)
// ただし、ベクトルや行列はイミュータブルで
// readonlyフラグがついているので、
// 以下のような代入はTypeScript上でエラーになります
a[0] = 3
// ^
// Cannot assign to '0' because it is a read-only property.
// mat2d.identのような定数もreadonlyで、
// Object.freezeされた配列として定義されています。
// 変更したい場合は `clone` を使ってください
const m = mat2d.clone(mat2d.ident)
m[4] *= 2.0
m[5] = -4.5
このライブラリの関数は、以下のライブラリの影響下にあります。実際、使える関数も共通しています:
- glMatrix -
add,subtract,scale,normalize,dot,cross,lerp,distance,transformMat* - GLSL -
step,mix,smoothstep,reflect,refract,faceforward - HoudiniのVex言語 -
fit,efit,invlerp,degrees,radians - Unity -
inverseLerp,oneMinus,saturate
モジュール
モジュール名はglMatrixに由来しています。