112  
查询码:00001177
threejs interactive -2 Raycaster之移动端事件处理
来源:https://blog.csdn.net/qq_41741576/article/details/97644411
作者: 朱凡 于 2020年03月27日 发布在分类 / FM组 / FM_App 下,并于 2020年03月27日 编辑
阅读 阅读数 读数 threejs three.js 来自 使用 模型 场景 博客

threejs interactive -2 Raycaster之移动端事件处理

二维屏幕坐标转3维世界坐标对比:
PC端:
PC端常用的鼠标事件:click,mousemove等

mouse.x=(event.clientX/window.innerWidth)*2-1;
				mouse.y=-(event.clientY/window.innerHeight)*2+1;

移动端:
移动端在touch上一共有4个事件:touchstart 、touchmove 、touchend、 touchcancel。
一般来说,它们执行的顺序为 touchstart -> touchmove -> touchend -> touchcancel .
其中touchcancel一般情况下不会触发,

mouse.x=(event.touches[0].pageX/window.innerWidth)*2-1;
				mouse.y=-(event.touches[0].pageY/window.innerHeight)*2+1;

核心代码

根据装置判断兼容性

var raycaster=new THREE.Raycaster();
			var mouse=new THREE.Vector2();
			function raycasterEvent(event){	
				event.preventDefault();
				
				if(event.touches){
					mouse.x=(event.touches[0].pageX/window.innerWidth)*2-1;
					mouse.y=-(event.touches[0].pageY/window.innerHeight)*2+1;
				}else{
					mouse.x=(event.clientX/window.innerWidth)*2-1;
					mouse.y=-(event.clientY/window.innerHeight)*2+1;	
				}
				
				raycaster.setFromCamera(mouse,camera);
				
				var intersect=raycaster.intersectObjects(scene.children,true);
				intersect[0].object.material.color.set(0xff0000);
			}
			window.addEventListener("click",raycasterEvent,false);
			//移动端必须使用移动端事件,否则无法检测
			window.addEventListener("touchstart",raycasterEvent,false);


 推荐知识

 历史版本

修改日期 修改人 备注
2020-03-27 14:29:23[当前版本] 朱凡 创建版本

  目录
    知识分享平台 -V 4.8.7 -wcp