node.js与jsonloader上的three.js冲突

时间:2013-10-22 11:46:20

标签: json node.js three.js collision-detection

我有最后一个问题。 在节点服务器中,我加载.json文件并放入场景以检测冲突。

节点:

 var loader = new THREE.JSONLoader();
    fs.readFile(__dirname+'/public/js/essai/lobby.js', 'utf8', function (err, data) {
                  if (err) {
                    console.log('Error: ' + err);
                    return;
                  }

                  data = JSON.parse(data);
                  var model = loader.parse( data );
                  var mesh = new THREE.Mesh( model.geometry, new THREE.MeshBasicMaterial() );
                  mesh.scale.set(40,40,40);
                  scene.add( mesh );
                  collisable.push( mesh );
    });

检测碰撞:

var collisions, i,
            // Maximum distance from the origin before we consider collision
            distance = 32,
            // Get the obstacles array from our world
            obstacles = GameEngine.getInstance().collidableMeshList;//basicScene.world.getObstacles();
        // For each ray
        for (i = 0; i < this.rays.length; i += 1) {
            // We reset the raycaster to this direction
            this.caster.set(this.design.position, this.rays[i]);
            // Test if we intersect with any obstacle mesh
            collisions = this.caster.intersectObjects(obstacles);
            // And disable that direction if we do
            if (collisions.length > 0 && collisions[0].distance <= distance) {
                // Yep, this.rays[i] gives us : 0 => up, 1 => up-left, 2 => left, ...
                if ((i === 0 || i === 1 || i === 7) && this.direction.z === 1) {
                   console.log("collisions"); //
                } else if ((i === 3 || i === 4 || i === 5) && this.direction.z === -1) {
                   console.log("collisions");
                }
                if ((i === 1 || i === 2 || i === 3) && this.direction.x === 1) {
                    console.log("collisions");
                } else if ((i === 5 || i === 6 || i === 7) && this.direction.x === -1) {
                    console.log("collisions");
                }
            }
        }

当我在客户端尝试碰撞时,它工作正常,但在服务器上,他没有检测到碰撞。 所以,我已经尝试在我的客户端加载json文件,看看负载是否正确。

当我在我的客户端中加载这样的内容时,场景就可以了:

loader.load( "essai/lobby.js", function( geometry ) {
     mesh = new THREE.Mesh( geometry, new THREE.MeshNormalMaterial() );
      mesh.scale.set( 40, 40, 40 );
      scene.add(mesh);
      animate();
});

当我在客户端加载这样的内容时,它不行:

$.getJSON("essai/lobby.js", function(data) {
      var model = loader.parse( data );
      var mesh = new THREE.Mesh( model.geometry, new THREE.MeshBasicMaterial() );
      mesh.scale.set(40,40,40);
      scene.add(mesh);
      animate();
      });

没有错误,但没有出现。

所以我认为对于服务器端来说是一样的,以及为什么永远不会发现冲突。

在服务器端,我不使用animate(),因为我认为没有必要。 而取消我的车的计算还可以。

所以我认为装载机可能没有正确加载网格,或者我不能像客户端那样进行检测冲突。 你觉得怎么样?

THX。

要检测客户端上的冲突,请使用:

this.rays = [
                new THREE.Vector3(0, 0, 1), //up
                new THREE.Vector3(1, 0, 1), //up left
                new THREE.Vector3(1, 0, 0), //left
                new THREE.Vector3(1, 0, -1), // down left
                new THREE.Vector3(0, 0, -1), //down
                new THREE.Vector3(-1, 0, -1), // down right
                new THREE.Vector3(-1, 0, 0), //rigth
                new THREE.Vector3(-1, 0, 1) //up right
        ];
        this.caster = new THREE.Raycaster();
        this.direction = new THREE.Vector3(0, 0, 0);

当我启动时,我设置了方向:this.direction.set(0,0,1); 当我失败时,我设置方向:this.direction.set(0,0,-1); ......

更新: 经过多次测试,碰撞检测到一个物体。 我发现Mesh在服务器端或客户端是相同的,但是加载后json对象的规模没有被考虑过!

所以我在加载和更改比例后尝试在我的node.js服务器中创建一个scene.updateMatrix(),但它是一样的。

您有什么想法来解决我的问题吗?

0 个答案:

没有答案