Skip to content
/ v128 Public

WebAssembly & Javascript module for fast 3D matrix vector calculations using SIMD vector 128 bits.

Notifications You must be signed in to change notification settings

Ricku34/v128

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.ready : Promise

Promise resolve when API is ready

Kind: static property of v128

v128.memory : object

memory API

Kind: static namespace of v128

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.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.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)

About

WebAssembly & Javascript module for fast 3D matrix vector calculations using SIMD vector 128 bits.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published