THREE.js 利用OrbitControls实现摄影机切换

计图大项目接近尾声,把自己部分的代码加入到大佬搭好的场景时,学习到了实现摄影
机切换的方法,于是分享一下。

1、OrbitControls

OrbitControls类是three.js提供的鼠标、方向键与场景交互的控件,通过鼠标拉拽来改变camera的位置、旋转角度等,从而改变视觉,更有真实感。
其构造函数如下:

OrbitControls( object : Camera, domElement : HTMLDOMElement )

参数说明:
object: (required) The camera to be controlled.
domElement: (optional) The HTML element used for event listeners. By default this is the whole document, however if you only want to the controls to work over a specific element (e.g. the canvas) you can specify that here.

想看更多信息可以查看官网文档,官网的最底部还有源码网址。

2、切换摄影机切换视觉

有时候我们的项目里可能有多个不同的场景,比如我的世界里进入房子时,需要从房子外部场景切换到房子内部,这样的场景切换都可以使用接下来描述的这种方法实现。

因为OrbitControls类主要通过改变摄影机来实现视觉改变,因此我们的切入点就在于这个摄影机:

//初始化,outsideCamera为放置在房子外部的摄影机
var controler = new THREE.OrbitControls(outsideCamera, renderer.domElement);

...
if (comingIntoHouse) {
    //改变控制的摄影机为insideCamera,insideCamera为放置在房子内部的摄影机
    controler = new THREE.OrbitControls(insideCamera, renderer.domElement);

    //如果是以下这种写法
    //controler.object = insideCamera;
    //这种写法不需要重新创建OrbitControls变量,
    //但是当切换回outsideCamera时,改变outsideCamera也会改变insideCamera,可能造成意想不到的错误视觉
    //且使用重新创建的方法,切换后的视觉位置永远不变,比较有切换的感觉(就大概那个意思吧)
}

你可能感兴趣的:(WebGL+Three.js)