在babylonjs中,如何打开/关闭自动旋转行为?

时间:2019-05-20 15:19:25

标签: babylonjs

我正在尝试通过单击场景外的按钮来找到一种在巴比伦场景中启动/停止相机自动旋转的方法。

var createScene = function () {

        var scene = new BABYLON.Scene(engine);

        scene.clearColor = new BABYLON.Color3(0, 0, 0);

        var camera = new BABYLON.ArcRotateCamera("Camera", Math.PI / 2, Math.PI / 2, 2, new BABYLON.Vector3(0,0,200), scene);
        camera.attachControl(canvas, true);

        var light1 = new BABYLON.HemisphericLight("light1", new BABYLON.Vector3(1, 1, 100), scene);
        var light2 = new BABYLON.PointLight("light2", new BABYLON.Vector3(0, 1, -1), scene);

        light1.intensity = 10;
        light2.intensity = 24;

        BABYLON.SceneLoader.ImportMesh("", "samples/79115-0_10MB/", "79115-0_100.obj", scene, function (newMeshes) {

        camera.target = newMeshes[0];

        });

        ////// set the behaviour here /////    
        camera.useAutoRotationBehavior = false;

        return scene;
    };

我尝试在createScene函数之外尝试切换功能以进行更改:

function toggleRotate(){
    if(autoR==0){
        autoR=1;
        camera.useAutoRotationBehavior = true;
    }else{
        autoR=0;
        camera.useAutoRotationBehavior = false;
    }
}

1 个答案:

答案 0 :(得分:1)

好的,您要解决的问题有点棘手。

实际上,您需要将旋转的相机绑定到引擎渲染循环。

例如,您可以具有以下渲染循环:

 var scene = new BABYLON.Scene(engine);
engine.runRenderLoop(() => {
  scene.render();
  rotateCamera();
});

然后您的rotateCamera方法包含以下说明:

  rotateCamera() {
    if(autoR==1){
      camera.alpha = (camera.alpha % (2*Math.PI)) + (offset);
    }
  }

offset变量是每帧要旋转相机(弧度)的值。

然后您的按钮必须仅调用切换autoR值的函数

有关更多信息,请随时访问BabylonJS论坛。 https://forum.babylonjs.com/c/questions