topical media & game development
mobile-query-three-plugins-physics-examples-body.htm / htm
<!doctype html><title>Minimal tQuery Page</title>
<script src="../../../build/tquery-bundle.js"></script>
<script src="../vendor/physijs/physi.js"></script>
<script src="../tquery.physijs.js"></script>
<script src='../../shadowmap/tquery.light.shadowmap.js'></script>
<script src="../../domevent/threex.domevent.js"></script>
<script src="../../domevent/tquery.object3d.domevent.js"></script>
<body><script>
var world = tQuery.createWorld().boilerplate().start();
world.tRenderer().shadowMapEnabled = true;
world.tRenderer().shadowMapSoft = true;
world.tRenderer().setClearColorHex( 0xffffff, 1 );
world.tCamera().position.set( 70, 40, 70 );
world.tCamera().lookAt( world.tScene().position );
world.removeCameraControls();
world.enablePhysics();
var light = tQuery.createDirectionalLight().addTo(world)
.position(20, 40, -15).color(0xffffff)
.castShadow(true).shadowMap(512*2,512*2)
.shadowCamera(60, -60, 60, -60, 20, 200)
.shadowDarkness(0.7).shadowBias(.002)
//.shadowCameraVisible(true)
var texture = THREE.ImageUtils.loadTexture( "images/plywood.jpg" );
var boxes = []
for(var i = 0; i < 10; i++){
var box = tQuery.createCube().addTo(world)
.setLambertMaterial().map(texture).back()
.castShadow(true)
.geometry().scaleBy(4, 4, 4).back()
.rotation(Math.random()*Math.PI*2, Math.random()*Math.PI*2, Math.random()*Math.PI*2)
.position(Math.random()*50-25, 25, Math.random()*50-25)
.enablePhysics({
friction : 0.4,
restitution : 0.6
});
boxes.push(box);
}
var texture = THREE.ImageUtils.loadTexture( "images/rocks.jpg" );
texture.wrapS = texture.wrapT = THREE.RepeatWrapping;
texture.repeat.set( 3, 3 );
// Ground
var ground = tQuery.createCube(100, 1, 100).addTo(world)
.setLambertMaterial().map(texture).back()
.receiveShadow(true)
.translateY(-10)
.enablePhysics({
mass : 0,
friction : 0.8,
restitution : 0.4
});
// mouseObject
var mouseObject = tQuery.createSphere().addTo(world)
.setBasicMaterial().wireframe(true).color(0x222222).back()
.translateY(-10)
.scaleBy(10)
// track the forceCenter on the ground
var forceCenter;
ground.on('mousemove', function(event){
forceCenter = event.intersect.point.clone();
mouseObject.position(forceCenter)
});
// apply Impulse force on the forceCenter
world.loop().hook(function(delta, now){
if( !forceCenter ) return;
var strength = 50;
for(var i = 0; i < boxes.length; i++){
var tMesh = boxes[i].get(0);
var distance = forceCenter.distanceTo( tMesh.position );
var effect = forceCenter.clone().subSelf( tMesh.position ).normalize().multiplyScalar( strength / distance ).negate();
var offset = forceCenter.clone().subSelf( tMesh.position );
boxes[i].physics().applyImpulse( effect, offset );
}
})
</script></body>
(C) Æliens
04/09/2009
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.