threex.oimo is a threex game extension for three.js. It provides a realistic physics easy to include in your own games. So you can take objects in your game and make them fall as if it was the real world! You can code a pool game in a day! You make rocks fall from the sky in a realistic fashion! Sky is the limit! It is a warper over the excelent library oimo.js physics library. lo-th, the author does a lot of crazy things! Be sure to check it out!
- examples/crates.html [view source] : It shows a slow motion demo of a football hitting a wall of crates.
- examples/basic.html [view source] : It shows a bunch of cube and sphere falling on a ground.
- examples/demo.html [view source] : It shows a more elaborate rendering. Planets falling down a pyramid in space.
You can install it via script tag
<script src='threex.oimo.js'></script>
Or you can install with bower, as you wish.
bower install threex.oimo
Well first you need to create a oimo.js world. You do that like this
var world = new OIMO.World()
Then, at every frame, update your mesh position/rotation.
world.step()
Then you need to create physics bodies and make them move
It will create the IOMO.Body
from a three.js mesh you give it.
Currently it support THREE.CubeGeometry
and THREE.SphereGeometry
. First create a normal THREE.Mesh
var geometry = new THREE.CubeGeometry(1,1,1)
var material = new THREE.MeshNormalMaterial()
var mesh = new THREE.Mesh( geometry, material )
scene.add(mesh)
Then you create the IOMO.Body
for it
var body = THREEx.Iomo.createBodyFromMesh(world, mesh)
It will update the position/rotation of a THREE.Mesh
based on a position/rotation of a IOMO.Body
. You need
this to see your meshes moves according to oimo.js physics.
First you create the object
var updater = new THREEx.Iomo.Body2MeshUpdater(body, mesh)
Then, at every frame, update your mesh position/rotation.
updater.update()
It will display statistic from oimo.js, it may be useful to know what is going on. It acts very much like mrdoob's stats or threex.rendererstats.
var oimoStats = new THREEx.Iomo.Stats(world)
document.body.appendChild(oimoStats.domElement)
Then, at every frame, update it.
oimoStats.update()