做Three.js三维可视化场景一般使用OrbitControls相机控制器。这个控制器实现了完整的平移、旋转和缩放等基本功能。提高了开发效率,省去了直接操控相机camera的麻烦,但是也有一定的缺点:

1、我们有时候需要灵活的主动控制相机,比如实现Three.js场景的路径漫游,就需要OrbitControls把相机控制权暂时的交出来,我们人为的控制一段时间,等漫游功能结束后再转交给OrbitControls操控;

2、OrbitControls的缩放和旋转功能都是以屏幕为中心进行,有很多应用场景无法满足用户的需求。我们只能是自己开发定制一个全新的newOrbitControls。下面是一个OrbitControls升级定制的案例,请欣赏:


【资料图】

https://www.bilibili.com/video/BV1cG4y1r7zw?share_source=copy_web&vd_source=d31d2a710c86176da821b293eef574bc

gisOrbitControls实现了:

1、重写Three.js的OrbitControls相机控制器

2、以鼠标所在位置为中心的场景旋转操控

3、以鼠标所在位置为中心的场景缩放

4、平移效果与Three.js默认平移相同

5、如果场景中有被选中的物体,则以所选中物体的中心为旋转基点(视频中未展示)

6、相机缩改可穿透物体,距离越近缩放越慢

7、可添加到threejs、Babylonjs、opengl、directX、osg等其它可视化引擎程序中

技术栈:threejs、opengl、osg、forge、cesium、CAD/Revit/3dMax开发、bim/gis、gltf/glb/fbx/3dtiles大场景数据的程序生成处理;欢迎交流与合作;

推荐内容