Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/milcktoast/particulate-js
Particle physics micro library.
https://github.com/milcktoast/particulate-js
javascript microlib particle-physics physics
Last synced: 1 day ago
JSON representation
Particle physics micro library.
- Host: GitHub
- URL: https://github.com/milcktoast/particulate-js
- Owner: milcktoast
- License: mit
- Created: 2014-07-05T15:30:43.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2019-10-17T19:25:26.000Z (about 5 years ago)
- Last Synced: 2024-07-25T00:18:48.203Z (5 months ago)
- Topics: javascript, microlib, particle-physics, physics
- Language: JavaScript
- Homepage: https://particulatejs.org
- Size: 604 KB
- Stars: 337
- Watchers: 20
- Forks: 30
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Particulate.js
[![Stability][stability-image]][stability-url]
[![Build Status][travis-image]][travis-url]
[![Test Coverage][coveralls-image]][coveralls-url]
[![Code Climate][climate-image]][climate-url]
[![Inline Docs][docs-image]][docs-url]
![File Size][size-image]Particulate.js is a JavaScript particle physics micro library designed to be simple, extensible, fast, and stable;
it is capable of running a simulation with tens of thousands of particles and tens of thousands of constraints in real time.
The core system is derived from that described in [Advanced Character Physics by Thomas Jakobsen][adv-phys-url].[Website](http://particulatejs.org) –
[Examples](http://particulatejs.org/examples/) –
[Docs](http://particulatejs.org/docs/) –
[Tests](http://particulatejs.org/test/)## Usage
The library provides an interface for defining a particle system with many inter-particle constraints
and globally acting forces. Internal management of particle positions and state is designed to be easily integrated
with a WebGL rendering pipeline, although no specific rendering scheme is required.### Install
Install with **npm** or **bower** or download the [built package][dist-url].
```sh
npm install particulate --save
``````sh
bower install particulate --save
```Then include the library as an ES6, AMD, or commonJS module, or browser global.
```js
import { ParticleSystem, DistanceConstraint } from 'particulate'
``````js
define(['particulate'], function (Particulate) { /* ... */ });
``````js
var Particulate = require('particulate');
``````js
var Particulate = window.Particulate;
```### Integrate Renderer
The following is a simplified version of the [chain example](http://particulatejs.org/examples/#chain/chain.html),
rendered with [Three.js][three-url]:```js
// ..................................................
// Define particle chain system
//var particleCount = 5;
var relaxIterations = 2;var system = Particulate.ParticleSystem.create(particleCount, relaxIterations);
var dist = Particulate.DistanceConstraint.create(10, [0, 1, 1, 2, 2, 3, 3, 4]);
var pin = Particulate.PointConstraint.create([0, 0, 0], 0);
var gravity = Particulate.DirectionalForce.create([0, -0.05, 0]);system.addConstraint(dist);
system.addPinConstraint(pin);
system.addForce(gravity);// ..................................................
// Integrate with Three.js
//var scene = new THREE.Scene();
// Use system positions buffer
var vertices = new THREE.BufferAttribute(system.positions, 3);// Use distance constraint indices
var indices = new THREE.BufferAttribute(new Uint16Array(dist.indices));// Particles
var dotsGeom = new THREE.BufferGeometry();
dotsGeom.addAttribute('position', vertices);var dots = new THREE.PointCloud(dotsGeom,
new THREE.PointCloudMaterial({ size : 2 }));// Connections
var linesGeom = new THREE.BufferGeometry();
linesGeom.addAttribute('position', vertices);
linesGeom.addAttribute('index', indices);var lines = new THREE.Line(linesGeom,
new THREE.LineBasicMaterial());scene.add(dots);
scene.add(lines);function animate() {
system.tick(1);
dotsGeom.attributes.position.needsUpdate = true; // Flag to update WebGL buffer
render();
}
```## Development
[Grunt][grunt-url] is used for building and testing the library.
You should have one path for each dependency:```sh
which node npm grunt
```After resolving development dependencies, run:
```sh
npm install
```### Test
Run a development server with `grunt server`.
Visit `localhost:8000/examples/` to view examples or `localhost:8000/test/` to run tests.
The development version of the library will be automatically rebuilt when any file matching `/src/**/*` changes.Tests can also be run from the command line with `grunt test`.
### Build
Running `grunt build` will generate a fully commented development version of the library as well as
a minified production version in `/dist`.### Document
Source code is documented in-line using [YUIDoc syntax](http://yui.github.io/yuidoc/syntax/index.html)
and compiled by running `grunt yuidoc`.### Contribute
There is not a formal style guide, but please maintain the existing coding style.
Any new or changed functionality should be documented and covered by unit tests.[adv-phys-url]: http://web.archive.org/web/20080410171619/http://www.teknikus.dk/tj/gdc2001.htm
[dist-url]: http://particulatejs.org/dist/particulate.js
[three-url]: http://threejs.org
[grunt-url]: http://gruntjs.com/
[yuidoc-url]: http://yui.github.io/yuidoc/syntax/index.html[stability-url]: https://nodejs.org/api/documentation.html#documentation_stability_index
[stability-image]: https://img.shields.io/badge/stability-stable-green.svg?style=flat-square
[travis-url]: https://travis-ci.org/jpweeks/particulate-js
[travis-image]: https://img.shields.io/travis/jpweeks/particulate-js/develop.svg?style=flat-square
[coveralls-url]: https://coveralls.io/r/jpweeks/particulate-js
[coveralls-image]: https://img.shields.io/coveralls/jpweeks/particulate-js/develop.svg?style=flat-square
[climate-url]: https://codeclimate.com/github/jpweeks/particulate-js/code
[climate-image]: https://img.shields.io/codeclimate/maintainability/jpweeks/particulate-js?style=flat-square
[docs-url]: https://inch-ci.org/github/jpweeks/particulate-js
[docs-image]: https://inch-ci.org/github/jpweeks/particulate-js.svg?branch=master&style=flat-square
[size-image]: https://badge-size.herokuapp.com/jpweeks/particulate-js/master/dist/particulate.min.js.svg?compression=gzip&style=flat-square