35three.js鼠标控制物体旋转缩放

JavaScript017

35three.js鼠标控制物体旋转缩放,第1张

three.js包含了很多相机控制器,通过旋转相机可以达到同样的旋转效果。

但是当我们需要固定场景背景,固定固定摄像机的时候。我们只能去移动物体了。Three.js提供了

TransformControls.js控件,它可以控制物体的旋转、缩放、平移,但是使用起来并不方便。

这个时候就需要自己动手写控制器了。

原理很简单:获取鼠标(手势)点击的位置,以及鼠标拖动的距离。

把移动的方向和距离作为参数传递给物体。然后在循环中改变物体的属性来控制物体。

将要转动的物体放在一个组中,改变该组就可以。

这里获取的是X轴方向的鼠标移动的值。然后绕Y轴旋转。也可以添加其他的方向的旋转事件。

也可以添加一个功能,点击立方体之上才有效果。再说吧。

ThingJS 使用角度控制物体旋转。

通常使用如下属性和接口控制物体旋转:

在世界坐标系下,使用 angles 属性来设置或访问旋转信息。

obj.angles = [0,45,0]   //设置世界坐标系Y轴向旋转45角度

在父物体坐标系下,使用 localAngles 属性来设置或访问旋转信息。

obj.localAngles = [0,45,0]   //设置父物体坐标系Y轴向旋转45角度

在自身坐标系下,使用如下接口方法:

//使用rotate,可输入角度和轴向。设置沿给定轴向转一定角度,传入的旋转轴是自身坐标系下的轴方向       obj.rotate( 45, [0,1,0])      //沿自身x轴向旋转,等同于 obj.rotate( 30, [1,0,0])       obj.rotateX(30)  //沿自身y轴向旋转,等同于 obj.rotate( 90, [0,1,0]) obj.rotateY(90)

//沿自身z轴向旋转,等同于 obj.rotate( -45, [0,0,1])         obj.rotateZ(-45)    

我们还可以使用 lookAt 接口方法,使得物体的观察方向一直对准一个位置或物体

//让物体面向[0,1,0],该坐标是在世界坐标下obj.lookAt( [0,1,0])   //让物体一直面向摄影机obj.lookAt( app.camera )        //让物体一直面向一个物体obj.lookAt( obj )  //让物体一直面向一个物体,同时物体沿自身Y轴向再旋转90度obj.lookAt( obj, [0,90,0] )              //取消lookAt功能obj.lookAt( null )  

查看示例网页链接

正常情况下,子物体会随着父物体旋转而一起旋转,如果想控制子物体不随父物体旋转,可通过设置子物体的 inheritAngles 属性为 false 而实现。