Threejs根据鼠标动态改变controls的target(缩放中心点)
来源:互联网 发布:开淘宝店怎么进货 编辑:程序博客网 时间:2024/05/19 22:50
好久没更新博客了,记下一笔
最近看到很多公司的产品的鼠标交互部分,controls的缩放中心不是固定的,比如这个,这个鼠标的交互方式跟我们平常用到的OrbitControls或者TrackballControls都不一样,特别是缩放时,它的target不是固定的,最近研究了一下:
废话不多说,先上图:
普通的缩放操作
优化后的缩放操作
代码如下:
$('body').on('mousewheel', function ( ev ){ var factor = 3; var WIDTH = window.innerWidth; var HEIGHT = window.innerHeight; //将鼠标的屏幕坐标转换为NDC坐标 var mX = ( ev.clientX / WIDTH ) * 2 - 1; var mY = - ( ev.clientY / HEIGHT ) * 2 + 1; //这里定义深度值为0.5,深度值越大,意味着精度越高 var vector = new THREE.Vector3(mX, mY, 0.5 ); //将鼠标坐标转换为3D空间坐标 vector.unproject(camera); //获得从相机指向鼠标所对应的3D空间点的射线(归一化) vector.sub( camera.position ).normalize(); if( ev.originalEvent.deltaY < 0 ){ camera.position.x += vector.x * factor; camera.position.y += vector.y * factor; camera.position.z += vector.z * factor; controls.target.x += vector.x * factor; controls.target.y += vector.y * factor; controls.target.z += vector.z * factor; } else{ camera.position.x -= vector.x * factor; camera.position.y -= vector.y * factor; camera.position.z -= vector.z * factor; controls.target.x -= vector.x * factor; controls.target.y -= vector.y * factor; controls.target.z -= vector.z * factor; } });
参考:
http://barkofthebyte.azurewebsites.net/post/2014/05/05/three-js-projecting-mouse-clicks-to-a-3d-scene-how-to-do-it-and-how-it-works
0 0
- Threejs根据鼠标动态改变controls的target(缩放中心点)
- UIImageView根据UIScrollView的中心点进行缩放
- 天地图专题三:根据标注点的范围确定天地图的中心点和缩放级别
- 根据输入的地点坐标计算中心点
- 动态改变鼠标光标
- iOS 视图缩放或旋转中中心点(AnchorPoint)的设定
- THREEJS(版本85)实现鼠标点击的高亮显示(如颜色变化)
- THREEJS的鼠标事件实现(中心旋转,放大缩小等)
- as3.0里怎样修改元件的缩放中心点
- 根据鼠标的位置动态的设置层的位置
- 根据字符串的长度动态的改变单元格的高度
- 鼠标动态改变表格样式
- 根据文本动态改变labelframe
- unity3d 5.0 点击鼠标动态改变gameObject的material
- UITextview 根据输入的内容动态改变高度
- 根据不同的情况动态改变menu菜单项
- 根据Gridview中选择的项 动态改变数据
- Android 根据Edittext内容动态改变Listview显示的数据
- 关于es6的一些常用关键字以及set与数组的操作
- 欢迎使用CSDN-markdown编辑器
- C# Process.Start()方法详解
- scala不使用new关键字创建对象实例
- 使用Spring Security Oauth2完成RESTful服务password认证的过程
- Threejs根据鼠标动态改变controls的target(缩放中心点)
- 拓扑排序(java)
- python sklearn one-hot编码
- [深度学习] RCNNs系列(1) Ubuntu下Faster RCNN配置及训练和测试自己的数据方法
- 文章标题
- 如何激活win7系统?老司机带你上路!
- Python
- 博客
- 委托和事件(三)