2015-04-06 80 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

這是解決這個問題的很多方法之一,這一切都取決於用例。請注意,設置相機的橢球非常重要 - 這是與相機一起移動的邊界框。碰撞被檢查對這個邊界框。