Subdivide Plane 选中网格
鼠标选中网格高亮
要实现的效果是:
网格上的高亮块时刻跟踪鼠标的移动。
可以分成三步实现:
- 获取鼠标在网格上的坐标A
- 根据坐标A获取网格上方块的坐标B
- 高亮平面的坐标移动到坐标B位置
实际显示的网格是THREE.GridHelper(网格助手),
需要创建一个不可见的辅助平面Plane,
Plane的尺寸和位置和grid完全一致,
鼠标在移动时,计算相机-鼠标raycaster射线和Plane的交点point。
point需要经过偏移得到高亮块绘制位置:
- floor() 向下取整
- addScale(num) xz轴正向偏移0.5
- y轴为0
创建辅助平面和高亮平面
1 | const plane = new THREE.Mesh( |
选中移动高亮块:
1 | const mousePosition = new THREE.Vector2() |
创建物体
鼠标点击事件中添加创建物体逻辑,
但是在物体创建之前需要先判断当前网格内是否已经存在物体:
使用的是坐标匹配的方式。
为了做提示,鼠标移动到已经存在物体的网格中时,需要将网格标红。
1 | const mousePosition = new THREE.Vector2() |
动画效果
- 高亮块闪烁效果
- 控制透明度
- 物体旋转浮动效果
1 | function animate(time) { |