Threejs根据鼠标动态改变controls的target(缩放中心点)
2017-04-26 16:32
1456 查看
好久没更新博客了,记下一笔
最近看到很多公司的产品的鼠标交互部分,controls的缩放中心不是固定的,比如这个,这个鼠标的交互方式跟我们平常用到的OrbitControls或者TrackballControls都不一样,特别是缩放时,它的target不是固定的,最近研究了一下:
废话不多说,先上图:
普通的缩放操作
优化后的缩放操作
代码如下:
参考:
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
最近看到很多公司的产品的鼠标交互部分,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
相关文章推荐
- 窗体中有一个图片框,显示一副图片。要求:1)在窗体打开时,动态加载图片;2)设置图片显示模式为根据图片框大小缩放图片;3)图片自己找;4)当鼠标停留在图片框时,显示“**风光”提
- iOS--根据文本内容的长度动态改变label的宽度(有最大值)
- Android 根据Edittext内容动态改变Listview显示的数据
- 根据数据动态改变Android列表背景颜色
- IOS笔记UI--固定宽度,根据内容动态改变高度
- 用GDI+画图像,根据鼠标区域改变填充颜色
- WPF : 以鼠标指针为中心缩放
- 在WPF里面实现以鼠标位置为中心缩放移动图片
- vc下动态改变鼠标光标
- js动态生成DIV(根据鼠标点击处生成DIV,兼容浏览器)
- 在WPF里面实现以鼠标位置为中心缩放移动图片
- 根据条件动态改变GridView某行或某个单元格的背景色
- DHTML技术演示---动态设置表格行间隔显示、表格排序、鼠标悬停样式改变
- 类似地图的以鼠标为中心缩放图像
- 根据条件动态改变GridView某行或某个单元格的背景色
- WPF : 以鼠标指针为中心缩放
- DevExpress.XtraGrid.GridControl GridView 根据条件动态改变 RepositoryItemButtonEdit 的Caption
- Android-Dialog根据listview的数据量动态改变高度,并且有一个最大的高度
- as3动态加载多张图片,自动缩放并加鼠标边框![新手]
- jQuery实现鼠标滚轮动态改变样式或效果