2

我一直在尝试以我自己的风格重写 Physi.js 示例之一,但我似乎无法让它真正使用重力。渲染循环不断触发,就像它应该的那样,但似乎没有任何改变。

我已经上传了我在这里的内容:http: //kemp59f.info/up/down/index.htm

这是 Physi.js 示例:http ://chandlerprall.github.com/Physijs/examples/body.html

这是我的代码:

var ground = {},
    box = {},
    boxes = [],
    ground = {},
    projector,
    renderer,
    scene,
    light,
    camera,
    render,
    gravity;

// Set things up for Physijs
Physijs.scripts.worker = 'physi.js_worker.js';
Physijs.scripts.ammo = 'ammo.js';

// Projector
projector = new THREE.Projector;

// Renderer
renderer = new THREE.WebGLRenderer({
    antialias: true
});
renderer.setSize( 1000, 600 );
renderer.shadowMapEnabled = true;
renderer.shadowMapSoft = true;

// Scene
scene = new Physijs.Scene;

// Camera
camera = new THREE.PerspectiveCamera( 35, ( 1000 / 600 ), 1, 1000 );
camera.position.set( 60, 50, 60 );
camera.lookAt( scene.position );

scene.add( camera );

// Light
light = new THREE.DirectionalLight( 0xFFFFFF );
light.position.set( 20, 40, -15 );
light.target.position.copy( scene.position );
light.castShadow = true;
light.shadowCameraLeft = -60;
light.shadowCameraTop = -60;
light.shadowCameraRight = 60;
light.shadowCameraBottom = 60;
light.shadowCameraNear = 20;
light.shadowCameraFar = 200;
light.shadowBias = -0.0001;
light.shadowMapWidth = light.shadowMapHeight = 2048;
light.shadowDarkness = 0.7;

scene.add( light );

// Ground
ground.material = new THREE.MeshLambertMaterial({
    color: 0xDDDDDD
});
ground.material = Physijs.createMaterial( ground.material, 0.8, 0.4 );
ground.geometry = new THREE.CubeGeometry( 100, 1, 100 );
ground.mesh = new Physijs.BoxMesh( ground.geometry, ground.material, 0 );
ground.mesh.receiveShadow = true;

scene.add( ground.mesh );

// Box
box.material = new THREE.MeshLambertMaterial({
    color: 0x00FF00
});
box.material = Physijs.createMaterial( box.material, 0.4, 0.6 );
box.geometry = new THREE.CubeGeometry( 4, 4, 4 );

// Draw 10 boxes
for( var i = 0; i < 10; i++ ){

    var pos = {},
        rot = {};

    pos.x = Math.random() * 50 - 25;
    pos.y = 10 + Math.random() * 5;
    pos.z = Math.random() * 50 - 25;
    rot.x = Math.random() * Math.PI * 2;
    rot.y = Math.random() * Math.PI * 2;
    rot.z = Math.random() * Math.PI * 2;
    box.mesh = new Physijs.BoxMesh( box.geometry, box.material );
    box.mesh.position.set( pos.x, pos.y, pos.z );
    box.mesh.rotation.set( rot.x, rot.y, rot.z );
    box.mesh.castShadow = true;

    scene.add( box.mesh );
    boxes.push( box.mesh );

};

// Render method
render = function(){

    scene.simulate( null, 50 );
    renderer.render( scene, camera );
    requestAnimationFrame( render );

};

// Render this shit
$( function(){

    $('#viewport').append( renderer.domElement );

    render();

});
4

1 回答 1

3

看来您的“physi.js_worker.js”版本是空的。这意味着网络工作者正在启动,但永远不会响应脚本。

于 2012-07-03T21:24:43.393 回答