Skip to content

fabmax/physx-js-webidl

Folders and files

NameName
Last commit message
Last commit date
Feb 16, 2025
Mar 25, 2025
Mar 26, 2025
Oct 3, 2024
Oct 3, 2024
Nov 20, 2022
Oct 3, 2024
Jan 13, 2021
Mar 25, 2025
Mar 25, 2025
Feb 16, 2025
Nov 2, 2024
Nov 2, 2024
Nov 2, 2024
Nov 2, 2024

Repository files navigation

physx-js-webidl

Javascript/WASM bindings for Nvidia PhysX 5.6.0.

Looking for pre-built binaries / build instructions? See below

Library coverage

The bindings include most major parts of the PhysX SDK (excluding CUDA stuff, which is not possible with WASM):

  • Basics
    • Static and dynamic actors
    • All geometry types (box, capsule, sphere, plane, convex mesh, triangle mesh and height field)
  • All joint types (revolute, spherical, prismatic, fixed, distance and D6)
  • Articulations
  • Vehicles
  • Character controllers
  • Scene serialization

Getting started

There is a basic hello world example: 10 boxes falling on the ground (drawn as wireframe on a plain canvas).

Documentation

The API is very close to the original PhysX C++ API, so you can simply use the official PhysX API documentation

However, in order to make the bindings work with emscripten a few additional wrappers are needed here and there. So it might make sense to also take a look into the PhysXWasm.idl interface definiton file.

Update as of v2.2.0: Thanks to Shannon Poole, PhysX enums can now be accessed by their qualified names (e.g. PhysX.PxIDENTITYEnum.PxIdentity, see also the hello world demo mentioned above).

Demos

I use this library in my engine kool and have a few demos in place:

  • Vehicle: Basic vehicle demo with a few obstacles.
  • Character: 3rd person character demo on an island.
  • Ragdolls: A simple ragdoll demo.
  • Joints: A chain running over two gears.
  • Collision: The obligatory box (and other shapes) collision physics demo.

However, the demos are written in kotlin, not javascript.

Pre-built binaries

This library is published as a npm package:

npm i physx-js-webidl

Alternatively you can grab the pre-built binaries (.wasm + support .js) from the latest Release.

Building

In order to build the library you need a recent version of the emscripten SDK - I'm using version 3.1.51. Alternatively, you can use docker as described below. After successful build, the binaries (.wasm + support .js) will appear in the dist directory.

# Clone this repo
git clone https://github.com/fabmax/physx-js-webidl

# Enter that directory
cd physx-js-webidl

# Download submodule containing the PhysX code
git submodule update --init

# Generate build-scripts
./generate.sh

# Build
./make.sh

To add bindings to additional PhysX interfaces you only have to edit the PhysXJs.idl file located in PhysX/physx/source/webidlbindings/src/wasm/ and recompile the library.

Build with Docker

The docker build also generates typescript definitions.

# Build the image
docker compose up

# Build Release
docker compose run --rm builder ./make.sh

# Build Profile
docker compose run --rm builder ./make-profile.sh

# Build Debug
docker compose run --rm builder ./make-debug.sh