我一直在尝试以自己的风格重写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();

});

最佳答案

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

关于javascript - Three.js + Physi.js-无法启动重力,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11315267/

10-10 07:40