计图大项目接近尾声,把自己部分的代码加入到大佬搭好的场景时,学习到了实现摄影
机切换的方法,于是分享一下。
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.
想看更多信息可以查看官网文档,官网的最底部还有源码网址。
有时候我们的项目里可能有多个不同的场景,比如我的世界里进入房子时,需要从房子外部场景切换到房子内部,这样的场景切换都可以使用接下来描述的这种方法实现。
因为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,可能造成意想不到的错误视觉
//且使用重新创建的方法,切换后的视觉位置永远不变,比较有切换的感觉(就大概那个意思吧)
}