v128 is an high performance javascript library for 3D matrix vector calculations using 128 bits vector type from WebAssembly
npm install v128
Web browser :
<script src="node_module/v128/dist/v128-min.js"></script>
Node.js :
const {v128} = require("v128");
await v128.init(4);
let cameraPos = v128.vector.new(0,2.5,-4);
let center = v128.vector.new(0,0,0);
let up = v128.vector.new(0,1,0);
let viewMatrix = v128.matrix.lookAt(cameraPos,center,up,v128.matrix.new());
let projectionMatrix = v128.matrix.perspective(Math.PI/2,4/3,0.1,1000,v128.matrix.new());
let viewProjection = v128.matrix.multiply(viewMatrix, projectionMatrix,v128.matrix.new());
WebGL compatibility :
gl.uniformMatrix4fv(projectionLocation, false, v128.memory.toArray(projectionMatrix));
prerequisite :
step to build : just type :
> make
WebAssembly & Javascript module fast matrix vector calculations using SIMD vector 128 bits.
Kind: global namespace
- v128 :
object
- .ready :
Promise
- .memory :
object
- .randomize()
- .alloc(size) ⇒
UInt32
- .free(pointer)
- .fill(pointer, ...vals)
- .slice(pointer) ⇒
Float32Array
- .toArray(pointer) ⇒
Float32Array
- .matrix :
object
- .new(...vals) ⇒
UInt32
- .free(pointer)
- .identity([pMatDest]) ⇒
- .multiply(pMatA, pMatB, pMatDest) ⇒
UInt32
- .transform(pMat, pVec, pVecDest) ⇒
UInt32
- .lookAt(pCamPos, pTargetPos, pUpAxis, pMatDest) ⇒
UInt32
- .invert(pMat, pMatDest) ⇒
UInt32
- .perspective(fovy, aspect, near, far, pMatDest) ⇒
UInt32
- .fromTranslation(pVec, pMatDest) ⇒
UInt32
- .fromScaling(pVec, pMatDest) ⇒
UInt32
- .fromXRotation(rad, pMatDest) ⇒
UInt32
- .fromYRotation(rad, pMatDest) ⇒
UInt32
- .fromZRotation(rad, pMatDest) ⇒
UInt32
- .rotateX(pMat, angle, pMatDest) ⇒
UInt32
- .rotateY(pMat, angle, pMatDest) ⇒
UInt32
- .rotateZ(pMat, angle, pMatDest) ⇒
UInt32
- .rotateX(pMat, pVec, pMatDest) ⇒
UInt32
- .new(...vals) ⇒
- .vector :
object
- .new(...vals) ⇒
UInt32
- .free(pointer)
- .length(pVec) ⇒
Number
- .normalize(pVec, pVecDest) ⇒
UInt32
- .add(pVecA, pVecB, pVecDest) ⇒
UInt32
- .sub(pVecA, pVecB, pVecDest) ⇒
UInt32
- .mul(pVecA, pVecB, pVecDest) ⇒
UInt32
- .div(pVecA, pVecB, pVecDest) ⇒
UInt32
- .cross(pVecA, pVecB, pVecDest) ⇒
UInt32
- .dot(pVecA, pVecB) ⇒
Number
- .scale(pVec, scale, pVecDest) ⇒
UInt32
- .new(...vals) ⇒
- .uniformBlock :
object
- .vertexBuffer :
object
- .init(size) ⇒
Promise
- .ready :
Promise resolve when API is ready
Kind: static property of v128
memory API
Kind: static namespace of v128
- .memory :
object
- .randomize()
- .alloc(size) ⇒
UInt32
- .free(pointer)
- .fill(pointer, ...vals)
- .slice(pointer) ⇒
Float32Array
- .toArray(pointer) ⇒
Float32Array
Randomize all the memory
Kind: instance method of memory
allocate float memory array
Kind: instance method of memory
Returns: UInt32
- the pointer from v128 memory
Param | Type | Description |
---|---|---|
size | Number |
the number of float to allocate |
free float memory
Kind: instance method of memory
Param | Type | Description |
---|---|---|
pointer | UInt32 |
the pointer to free |
fill float memory with given values
Kind: instance method of memory
Param | Type | Description |
---|---|---|
pointer | UInt32 |
|
...vals | Numbers |
number values to fill |
get copy of portion float memory
Kind: instance method of memory
Param | Type |
---|---|
pointer | UInt32 |
get read/write access of portion float memory
Kind: instance method of memory
Param | Type |
---|---|
pointer | UInt32 |
matrix API
Kind: static namespace of v128
- .matrix :
object
- .new(...vals) ⇒
UInt32
- .free(pointer)
- .identity([pMatDest]) ⇒
- .multiply(pMatA, pMatB, pMatDest) ⇒
UInt32
- .transform(pMat, pVec, pVecDest) ⇒
UInt32
- .lookAt(pCamPos, pTargetPos, pUpAxis, pMatDest) ⇒
UInt32
- .invert(pMat, pMatDest) ⇒
UInt32
- .perspective(fovy, aspect, near, far, pMatDest) ⇒
UInt32
- .fromTranslation(pVec, pMatDest) ⇒
UInt32
- .fromScaling(pVec, pMatDest) ⇒
UInt32
- .fromXRotation(rad, pMatDest) ⇒
UInt32
- .fromYRotation(rad, pMatDest) ⇒
UInt32
- .fromZRotation(rad, pMatDest) ⇒
UInt32
- .rotateX(pMat, angle, pMatDest) ⇒
UInt32
- .rotateY(pMat, angle, pMatDest) ⇒
UInt32
- .rotateZ(pMat, angle, pMatDest) ⇒
UInt32
- .rotateX(pMat, pVec, pMatDest) ⇒
UInt32
- .new(...vals) ⇒
fast create new matrix from initial values
Kind: instance method of matrix
Returns: UInt32
- the pointer to new matrix
Param | Type | Description |
---|---|---|
...vals | Numbers |
number values to fill into matrix |
free the matrix
Kind: instance method of matrix
Param | Type | Description |
---|---|---|
pointer | UInt32 |
the pointer of matrix to free |
set or create matrix identity
Kind: instance method of matrix
Returns: the pointer of matrix identity
Param | Type | Description |
---|---|---|
[pMatDest] | UInt32 |
the pointer of matrix to set |
fast multiply 2 matrix (WebAssembly method)
Kind: instance method of matrix
Returns: UInt32
- the pointer to result matrix A*B
Param | Type | Description |
---|---|---|
pMatA | UInt32 |
pointer of matrix A |
pMatB | UInt32 |
pointer of matrix B |
pMatDest | UInt32 |
pointer of result matrix A*B |
fast multiply matrix * vector (WebAssembly method)
Kind: instance method of matrix
Returns: UInt32
- the pointer to result transformed vector
Param | Type | Description |
---|---|---|
pMat | UInt32 |
pointer of matrix |
pVec | UInt32 |
pointer of vector |
pVecDest | UInt32 |
pointer of result transformed vector (matrix * vector) |
fast create view matrix from camera position & target position (WebAssembly method)
Kind: instance method of matrix
Returns: UInt32
- the pointer to result view matrix
Param | Type | Description |
---|---|---|
pCamPos | UInt32 |
pointer of camera position |
pTargetPos | UInt32 |
pointer of target position |
pUpAxis | UInt32 |
pointer of up axis |
pMatDest | UInt32 |
pointer of result view matrix |
fast invert matrix (WebAssembly method)
Kind: instance method of matrix
Returns: UInt32
- the pointer to inversed matrix
Param | Type | Description |
---|---|---|
pMat | UInt32 |
pointer of th matrix |
pMatDest | UInt32 |
pointer of inversed matrix |
create projection matrix from perspective data
Kind: instance method of matrix
Returns: UInt32
- the pointer to result projection matrix
Param | Type | Description |
---|---|---|
fovy | number |
Vertical field of view in radians |
aspect | number |
Aspect ratio. typically viewport width/height |
near | number |
Near clipping bound of the frustum |
far | number |
Far clipping bound of the frustum |
pMatDest | UInt32 |
pointer of result projection matrix |
Creates a matrix from a vector translation
Kind: instance method of matrix
Returns: UInt32
- the pointer to result translated matrix
Param | Type | Description |
---|---|---|
pVec | UInt32 |
pointer of Translation vector |
pMatDest | UInt32 |
pointer of result translated matrix |
Creates a matrix from a vector scaling
Kind: instance method of matrix
Returns: UInt32
- the pointer to result scaled matrix
Param | Type | Description |
---|---|---|
pVec | UInt32 |
pointer of scaling vector |
pMatDest | UInt32 |
pointer of result scaled matrix |
Creates a matrix from the given angle around the X axis
Kind: instance method of matrix
Returns: UInt32
- the pointer to result rotated matrix
Param | Type | Description |
---|---|---|
rad | Number |
the angle to rotate the matrix by |
pMatDest | UInt32 |
pointer of result rotated matrix |
Creates a matrix from the given angle around the Y axis
Kind: instance method of matrix
Returns: UInt32
- the pointer to result rotated matrix
Param | Type | Description |
---|---|---|
rad | Number |
the angle to rotate the matrix by |
pMatDest | UInt32 |
pointer of result rotated matrix |
Creates a matrix from the given angle around the Z axis
Kind: instance method of matrix
Returns: UInt32
- the pointer to result rotated matrix
Param | Type | Description |
---|---|---|
rad | Number |
the angle to rotate the matrix by |
pMatDest | UInt32 |
pointer of result rotated matrix |
Rotates a matrix by the given angle around the X axis
Kind: instance method of matrix
Returns: UInt32
- the pointer of the receiving matrix
Param | Type | Description |
---|---|---|
pMat | UInt32 |
pointer of matrix to rotate |
angle | Number |
the angle in radian to rotate the matrix by |
pMatDest | UInt32 |
pointer of the receiving matrix |
Rotates a matrix by the given angle around the Y axis
Kind: instance method of matrix
Returns: UInt32
- the pointer of the receiving matrix
Param | Type | Description |
---|---|---|
pMat | UInt32 |
pointer of matrix to rotate |
angle | Number |
the angle in radian to rotate the matrix by |
pMatDest | UInt32 |
pointer of the receiving matrix |
Rotates a matrix by the given angle around the Z axis
Kind: instance method of matrix
Returns: UInt32
- the pointer of the receiving matrix
Param | Type | Description |
---|---|---|
pMat | UInt32 |
pointer of matrix to rotate |
angle | Number |
the angle in radian to rotate the matrix by |
pMatDest | UInt32 |
pointer of the receiving matrix |
Translates a matrix by the given vector
Kind: instance method of matrix
Returns: UInt32
- the pointer of the receiving matrix
Param | Type | Description |
---|---|---|
pMat | UInt32 |
pointer of matrix to translate |
pVec | Number |
pointer of vector to translate by |
pMatDest | UInt32 |
pointer of the receiving matrix |
vector API
Kind: static namespace of v128
- .vector :
object
- .new(...vals) ⇒
UInt32
- .free(pointer)
- .length(pVec) ⇒
Number
- .normalize(pVec, pVecDest) ⇒
UInt32
- .add(pVecA, pVecB, pVecDest) ⇒
UInt32
- .sub(pVecA, pVecB, pVecDest) ⇒
UInt32
- .mul(pVecA, pVecB, pVecDest) ⇒
UInt32
- .div(pVecA, pVecB, pVecDest) ⇒
UInt32
- .cross(pVecA, pVecB, pVecDest) ⇒
UInt32
- .dot(pVecA, pVecB) ⇒
Number
- .scale(pVec, scale, pVecDest) ⇒
UInt32
- .new(...vals) ⇒
fast create new vector from initial values
Kind: instance method of vector
Returns: UInt32
- the pointer to new vector
Param | Type | Description |
---|---|---|
...vals | Numbers |
number values to fill into vector |
free the vector
Kind: instance method of vector
Param | Type | Description |
---|---|---|
pointer | UInt32 |
the pointer of vector to free |
get fast length of 3D Homogeneous coordinates vector (WebAssembly method)
Kind: instance method of vector
Returns: Number
- the length of vector
Param | Type | Description |
---|---|---|
pVec | UInt32 |
pointer of vector |
fast normalize 3D Homogeneous coordinates vector (WebAssembly method)
Kind: instance method of vector
Returns: UInt32
- the pointer of normalized vector
Param | Type | Description |
---|---|---|
pVec | UInt32 |
pointer of vector |
pVecDest | UInt32 |
pointer of receive normalized vector |
fast add two 3D Homogeneous coordinates vector (WebAssembly method)
Kind: instance method of vector
Returns: UInt32
- the pointer of result vector
Param | Type | Description |
---|---|---|
pVecA | UInt32 |
pointer of vector A |
pVecB | UInt32 |
pointer of vector B |
pVecDest | UInt32 |
pointer of receive sum result vector ( A + B ) |
fast sub two 3D Homogeneous coordinates vector (WebAssembly method)
Kind: instance method of vector
Returns: UInt32
- the pointer of result vector
Param | Type | Description |
---|---|---|
pVecA | UInt32 |
pointer of vector A |
pVecB | UInt32 |
pointer of vector B |
pVecDest | UInt32 |
pointer of receive sum result vector ( A - B ) |
fast multiply two 3D Homogeneous coordinates vector (WebAssembly method)
Kind: instance method of vector
Returns: UInt32
- the pointer of result vector
Param | Type | Description |
---|---|---|
pVecA | UInt32 |
pointer of vector A |
pVecB | UInt32 |
pointer of vector B |
pVecDest | UInt32 |
pointer of receive multiply result vector ( A * B ) |
fast divide two 3D Homogeneous coordinates vector (WebAssembly method)
Kind: instance method of vector
Returns: UInt32
- the pointer of result vector
Param | Type | Description |
---|---|---|
pVecA | UInt32 |
pointer of vector A |
pVecB | UInt32 |
pointer of vector B |
pVecDest | UInt32 |
pointer of receive divide result vector ( A / B ) |
fast cross product of two 3D Homogeneous coordinates vector (WebAssembly method)
Kind: instance method of vector
Returns: UInt32
- the pointer of result vector
Param | Type | Description |
---|---|---|
pVecA | UInt32 |
pointer of vector A |
pVecB | UInt32 |
pointer of vector B |
pVecDest | UInt32 |
pointer of receive cross product result vector ( A.B ) |
fast dot product of two 3D Homogeneous coordinates vector (WebAssembly method)
Kind: instance method of vector
Returns: Number
- the pointer of result vector
Param | Type | Description |
---|---|---|
pVecA | UInt32 |
pointer of vector A |
pVecB | UInt32 |
pointer of vector B |
fast scale vector by a scalar number
Kind: instance method of vector
Returns: UInt32
- the pointer of result vector
Param | Type | Description |
---|---|---|
pVec | UInt32 |
pointer of vector to scale |
scale | Number |
amount to scale the vector by |
pVecDest | UInt32 |
pointer of receive result vector |
WebGL2 Uniform Buffer Objects API (UBOs) using std140 layout.
Kind: static namespace of v128
WebGL Vertex Buffer Objects API (VBOs)
Kind: static namespace of v128
Initialize the v128 API
Kind: static method of v128
Returns: Promise
- resolve when API is ready
Param | Type | Description |
---|---|---|
size | Number |
the number of page for v128 Memory (page = 64Kb) |