0.0.37 • Published 4 years ago

three-physx v0.0.37

Weekly downloads
-
License
MIT
Repository
github
Last release
4 years ago

Three-Physx

Natively multithreaded physics for threejs with PhysX and an easy interface.

Credit to Milkshake inc, physx-js, three-ammo, three-to-cannon, engine-3-zjt

DISCLAIMER: this is a work in progress and API & implementation is set to change This will eventually be superseeded by https://github.com/HexaField/web-physx

Progress:

  • Load WASM in webworker
  • Set up message queue & function calls over events
  • three-to-physx shape converter
  • return transforms
  • kinematic
  • collision events
  • update bodies
  • new build with more bindings
  • put body ids on arraybuffers for more efficient data transfer
  • capsule
  • character controller
  • collision filtering
  • trimesh and convex
  • raycasts
  • get rid of transform, make internal and rely entirely on Vector3 & Quaternion
  • fix up updating body and shape data
  • obstacles
  • fix root object scaling bug
  • raycasts ignore backface option
  • vehicle controller
  • heightfield colliders
  • geometry per instance scaling
  • add subscribe for event listeners on worker to reduce redundant transfer overhead
  • advanced & customisable collision filtering
  • full api support (eventually)
  • move most stuff to WASM for improved performance

Example

https://three-physx.netlify.app/

Netlify Status

API

-work in progress-

This multithreaded PhysX API uses a singleton approach. This way the PhysX interface is accessible globally once instantiated.

import { PhysXInstance, Transform } from 'three-physx';

// create the interface
await PhysXInstance.instance.initPhysX(new Worker('./worker.js'), { tps: 60, start: true });

// add an object
const body = PhysXInstance.instance.addBody(new Body({
  shapes: [
    {
      shape: SHAPES.Box,
      config: {
        collisionLayer: COLLISIONS.FLOOR,
        collisionMask: COLLISIONS.ALL
      }
    }
  ],
  type: BodyType.DYNAMIC
}));

// In scene loop
PhysXInstance.instance.update();

worker.js

import { receiveWorker } from "three-physx";
import PHYSX from './physx.release.js';
PHYSX().then(receiveWorker);

Building PhysX

cd physx-js
npm install
npm run generate
npm run dev

This will copy files to /lib

0.0.37

4 years ago

0.0.36

4 years ago

0.0.35

4 years ago

0.0.34

4 years ago

0.0.33

4 years ago

0.0.24

4 years ago

0.0.25

4 years ago

0.0.30

4 years ago

0.0.31

4 years ago

0.0.32

4 years ago

0.0.26

4 years ago

0.0.27

4 years ago

0.0.28

4 years ago

0.0.29

4 years ago

0.0.22

4 years ago

0.0.23

4 years ago

0.0.21

4 years ago

0.0.20

4 years ago

0.0.19

4 years ago

0.0.18

4 years ago

0.0.17

4 years ago

0.0.16

4 years ago

0.0.15

4 years ago

0.0.14

4 years ago

0.0.13

4 years ago

0.0.12

4 years ago

0.0.11

4 years ago

0.0.10

4 years ago

0.0.9

4 years ago

0.0.8

4 years ago

0.0.7

4 years ago

0.0.6

4 years ago

0.0.5

4 years ago

0.0.4

4 years ago

0.0.3

4 years ago

0.0.2

4 years ago

0.0.1

4 years ago