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 :
> makeAPI 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) |