v128 v0.3.4
v128
v128 is an high performance javascript library for 3D matrix vector calculations using 128 bits vector type from WebAssembly
Installation :
npm install v128
Getting started
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));
How to build :
prerequisite :
step to build : just type :
> make
API Reference
v128 : object
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
- .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
- .uniformBlock : object
- .vertexBuffer : object
- .init(size) ⇒ Promise
v128.ready : Promise
Promise resolve when API is ready
Kind: static property of v128
v128.memory : object
memory API
Kind: static namespace of v128
- .memory : object
- .randomize()
- .alloc(size) ⇒ UInt32
- .free(pointer)
- .fill(pointer, ...vals)
- .slice(pointer) ⇒ Float32Array
- .toArray(pointer) ⇒ Float32Array
memory.randomize()
Randomize all the memory
Kind: instance method of memory
memory.alloc(size) ⇒ UInt32
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 |
memory.free(pointer)
free float memory
Kind: instance method of memory
Param | Type | Description |
---|---|---|
pointer | UInt32 | the pointer to free |
memory.fill(pointer, ...vals)
fill float memory with given values
Kind: instance method of memory
Param | Type | Description |
---|---|---|
pointer | UInt32 | |
...vals | Numbers | number values to fill |
memory.slice(pointer) ⇒ Float32Array
get copy of portion float memory
Kind: instance method of memory
Param | Type |
---|---|
pointer | UInt32 |
memory.toArray(pointer) ⇒ Float32Array
get read/write access of portion float memory
Kind: instance method of memory
Param | Type |
---|---|
pointer | UInt32 |
v128.matrix : object
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
matrix.new(...vals) ⇒ UInt32
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 |
matrix.free(pointer)
free the matrix
Kind: instance method of matrix
Param | Type | Description |
---|---|---|
pointer | UInt32 | the pointer of matrix to free |
matrix.identity(pMatDest) ⇒
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 |
matrix.multiply(pMatA, pMatB, pMatDest) ⇒ UInt32
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 |
matrix.transform(pMat, pVec, pVecDest) ⇒ UInt32
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) |
matrix.lookAt(pCamPos, pTargetPos, pUpAxis, pMatDest) ⇒ UInt32
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 |
matrix.invert(pMat, pMatDest) ⇒ UInt32
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 |
matrix.perspective(fovy, aspect, near, far, pMatDest) ⇒ UInt32
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 |
matrix.fromTranslation(pVec, pMatDest) ⇒ UInt32
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 |
matrix.fromScaling(pVec, pMatDest) ⇒ UInt32
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 |
matrix.fromXRotation(rad, pMatDest) ⇒ UInt32
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 |
matrix.fromYRotation(rad, pMatDest) ⇒ UInt32
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 |
matrix.fromZRotation(rad, pMatDest) ⇒ UInt32
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 |
matrix.rotateX(pMat, angle, pMatDest) ⇒ UInt32
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 |
matrix.rotateY(pMat, angle, pMatDest) ⇒ UInt32
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 |
matrix.rotateZ(pMat, angle, pMatDest) ⇒ UInt32
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 |
matrix.rotateX(pMat, pVec, pMatDest) ⇒ UInt32
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 |
v128.vector : object
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
vector.new(...vals) ⇒ UInt32
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 |
vector.free(pointer)
free the vector
Kind: instance method of vector
Param | Type | Description |
---|---|---|
pointer | UInt32 | the pointer of vector to free |
vector.length(pVec) ⇒ Number
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 |
vector.normalize(pVec, pVecDest) ⇒ UInt32
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 |
vector.add(pVecA, pVecB, pVecDest) ⇒ UInt32
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 ) |
vector.sub(pVecA, pVecB, pVecDest) ⇒ UInt32
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 ) |
vector.mul(pVecA, pVecB, pVecDest) ⇒ UInt32
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 ) |
vector.div(pVecA, pVecB, pVecDest) ⇒ UInt32
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 ) |
vector.cross(pVecA, pVecB, pVecDest) ⇒ UInt32
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 ) |
vector.dot(pVecA, pVecB) ⇒ Number
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 |
vector.scale(pVec, scale, pVecDest) ⇒ UInt32
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 |
v128.uniformBlock : object
WebGL2 Uniform Buffer Objects API (UBOs) using std140 layout.
Kind: static namespace of v128
v128.vertexBuffer : object
WebGL Vertex Buffer Objects API (VBOs)
Kind: static namespace of v128
v128.init(size) ⇒ Promise
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) |