particulate-js

Particle physics micro library.

Github星跟蹤圖

Particulate.js

Stability
Build Status
Test Coverage
Code Climate
Inline Docs
File Size

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.

Website
Examples
Docs
Tests

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.

npm install particulate --save
bower install particulate --save

Then include the library as an ES6, AMD, or commonJS module, or browser global.

import { ParticleSystem, DistanceConstraint } from 'particulate'
define(['particulate'], function (Particulate) { /* ... */ });
var Particulate = require('particulate');
var Particulate = window.Particulate;

Integrate Renderer

The following is a simplified version of the chain example,
rendered with Three.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 is used for building and testing the library.
You should have one path for each dependency:

which node npm grunt

After resolving development dependencies, run:

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

主要指標

概覽
名稱與所有者milcktoast/particulate-js
主編程語言JavaScript
編程語言HTML (語言數: 2)
平台
許可證MIT License
所有者活动
創建於2014-07-05 15:30:43
推送於2019-10-17 19:25:26
最后一次提交2019-10-17 12:21:28
發布數7
最新版本名稱0.3.3 (發布於 2016-07-06 19:47:39)
第一版名稱0.0.1 (發布於 )
用户参与
星數341
關注者數19
派生數29
提交數163
已啟用問題?
問題數2
打開的問題數0
拉請求數0
打開的拉請求數0
關閉的拉請求數0
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?