1

我想要一个事件,当相机触摸网格时,它会像门户一样移动到其他地方。

这是我的相机:

function MaCamera(scene, positionCx, positionCy, positionCz) 
{        
    var freeCamera = new BABYLON.FreeCamera("FreeCamera", new BABYLON.Vector3(positionCx, positionCy, positionCz), scene);
         freeCamera.rotation = new BABYLON.Vector3(0.5, 0, 0);
         freeCamera.attachControl(canvas, true);
         freeCamera.checkCollisions = true;
         scene.activeCamera = freeCamera;
}

这是我的网格:

var drawMirror = BABYLON.Mesh.CreateBox("rectangle", 1, scene);
      drawMirror.scaling = new BABYLON.Vector3(12, 0.1, 20);
      drawMirror.rotation.x = Math.PI / 2;
      drawMirror.position = new BABYLON.Vector3(positionMx, positionMy, positionMz);
      drawMirror.checkCollisions = true;
4

1 回答 1

4

通过在 BabylonJS 中打开本机碰撞检测,您可以使用回调实现相机网格碰撞。

首先,开启全局碰撞检测:

//Enable global collisions
scene.collisionsEnabled = true;

//Enable camera collisions
camera.checkCollisions = true;

//Enable mesh collision (per mesh)
drawMirror.checkCollisions = true;

二、设置相机的onCollide方法:

camera.onCollide = function(collidedMesh) {
    if(collidedMesh.uniqueId === drawMirror.uniqueId) {
        //set the new camera position
        camera.position = new BABYLON.Vector3(13,37,42);
    }
}

这是一个快速的游乐场,展示它是如何工作的。http://www.babylonjs-playground.com/#1VLOU4

这是解决此问题的众多方法之一,这完全取决于用例。请注意,设置相机的椭球体很重要——这是与相机一起移动的边界框。针对此边界框检查碰撞。

于 2015-06-04T09:09:28.303 回答