How to Create Objects on MouseClick?鼠标点击创建物体
实现原理
Threejs中不提供获取鼠标在空间中位置的api
因此作者研究出的方法如图所示:
需要两个步骤:
根据相机位置,创建一个一直正面对着相机的平面
- 以相机和原点连线为法线,原点为交点,创建平面
- 使用threejs提供的setFromNormalAndCoplanarPoint方法
根据鼠标和屏幕的交点,判断点击坐标
- 获取相机和鼠标连线与辅助平面的交点,即鼠标点击坐标
代码实现
坐标计算
1 | const mouse = new THREE.Vector2() |
物体添加
1 | window.onclick = function(e){ |
非全屏的raycaster坐标计算
全屏时,画布的宽高取的是:
- window.innerWidth
- window.innerHeight
非全屏时,需要将大部分涉及到宽高的值替换成:
- dom.clientWidth
- dom.clientHeight
1 | // 鼠标射线 |