topical media & game development

talk show tell print

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.