hello guys,
So I create two cameras in the same scene and I switch to one to other with boolean variable that I recover it from an other software.
so when I change the boolean from 0 to 1 my camera moves through a specific goal and it works fine (inside move() function there is a specific path and scene.beginAnimation() function ).
the problem is when I try to turn back to initial caméra (1 to 0), it blocks on the second (I think because I use runRenderLoop() and I define scene.render() inside), so despite my changing it gards the last scene event which is my goal.
so any idea how to stop scene in order to turn back to initial view this is my code :
var camera1;
var camera2;
var scene;
var canvas;
var engine;
var activeCamera;
var x;
var InitCamera= function(){
camera1= new BABYLON.ArcRotateCamera("Camera",0, 0, 10, new BABYLON.Vector3(0, 0, 0),
scene);
camera2=camera1
activeCamera="StandardCamera";
scene.activeCamera=camera1;
camera1.attachControl(canvas, false);
}
var UseCamera1=function(){
if(activeCamera="SecondCamera"){
activeCamera="StandardCamera";
camera2.detachControl(canvas);
}
scene.activeCamera=camera1;
camera1.attachControl(canvas, false);
}
var UseCamera2=function(){
if(activeCamera="StandardCamera"){
activeCamera="SecondCamera";
camera1.detachControl(canvas);
}
scene.activeCamera=camera2;
camera2.attachControl(canvas, false);
MoveCamera();
}
var MoveCamera=function(){
var MyGoal = new BABYLON.Vector3(5,1,0);
var MyCurve= MyPath(camera2.position,MyGoal);
MoveCameraThrough(scene, camera2, MyCurve);
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
var CreateScene=function(){
canvas = document.getElementById("renderCanvas"); // Get the canvas element
engine = new BABYLON.Engine(canvas, true);
scene= new BABYLON.Scene(engine);
BABYLON.SceneLoader.Append("/data/html/babylonTest/", "coffrageLight.babylon",
scene,function(scene){
scene.clearColor = new BABYLON.Color3(1, 1, 1);
})
InitCamera();
oaJsApi.dpConnect("second.:_original.._value",true,{
success: function(data) {
x = data.value;
if(x == 1)
{
UseCamera1();
}
else if(x == 2)
{
UseCamera2();
}
}
});
return scene
}
var scene = CreateScene();
engine.runRenderLoop(function(){
scene.render();
});
window.addEventListener("resize", function () {
engine.resize();
});
and this is my MoveCameraThrough() function :
function MoveCameraThrough( scene , camera, MyCurve)
{
const path3d = new BABYLON.Path3D(MyCurve.getPoints());
const tangents = path3d.getTangents(); // array of tangents to the curve
const normals = path3d.getNormals(); // array of normals to the curve
const binormals = path3d.getBinormals(); // array of binormals to curve
const speed = 30*Math.floor(Math.random() * (7 - 3 + 1)) + 3; // const speed = 1
const animationPosition = new BABYLON.Animation('animPos', 'position', speed,
BABYLON.Animation.ANIMATIONTYPE_VECTOR3,
BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE);
const animationRotation = new BABYLON.Animation('animRot', 'rotation', speed,
BABYLON.Animation.ANIMATIONTYPE_VECTOR3,
BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE);
const keysPosition = [];
const keysRotation = [];
for (let p = 0; p < MyCurve.getPoints().length; p++) {
keysPosition.push({
frame: p,
value: MyCurve.getPoints()[p]
});
keysRotation.push({
frame: p,
value: BABYLON.Vector3.RotationFromAxis(normals[p], binormals[p], tangents[p])
});
}
animationPosition.setKeys(keysPosition);
animationRotation.setKeys(keysRotation);
camera.animations=[
animationPosition,
animationRotation
];
scene.beginAnimation(camera, 0, 200, false);
}
Thank you
Anes