2015-04-06 130 views
0

我想要一个事件,当相机触摸网格物体时,它会移动到其他位置,如门户。检测相机和网格物体之间的碰撞

这是我的相机:

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; 

回答

1

通过转动本地碰撞检测BabylonJS可以实现相机目collisionsusing回调。

首先,打开全球碰撞检测:

//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

这是解决这个问题的很多方法之一,这一切都取决于用例。请注意,设置相机的椭球非常重要 - 这是与相机一起移动的边界框。碰撞被检查对这个边界框。