three.js模型拖拽旋转
文章图片
效果展示 通过判断鼠标像素坐标与模型中心点像素坐标进行计算角度(three.js版本125)
mousedown(e){
this.dragingModel.center = this.worldToScreen(this.dragingModel.position);
//模型中心点世界坐标转屏幕坐标
this.dragingModel.angle0 = this.rotateAngle(this.dragingModel.center, new Vector2(e.layerX, e.layerY));
// 计算出初始角度
}
mousemove(e){
this.dragingModel.angle = this.rotateAngle(this.dragingModel.center, new Vector2(e.layerX, e.layerY));
//鼠标实时角度
const offset = this.dragingModel.angle - this.dragingModel.angle0;
this.dragingModel.rotateY(-offset);
this.dragingModel.angle0 = this.dragingModel.angle;
}
worldToScreen(pos) {
//世界坐标转屏幕坐标
【three.js模型拖拽旋转】const standardVector = new Vector3().copy(pos).project(this.camera);
const w = this.containerWidth / 2;
const h = this.containerHeight / 2;
return new Vector2(window.Math.round(standardVector.x * w + w), window.Math.round(-standardVector.y * h + h));
}
rotateAngle(center, pos) {
//计算旋转角度
const off = new Vector2().copy(center).sub(pos);
return off.angle();
}
推荐阅读
- Flutter的ListView
- 一般模型化关系——从模型是什么到如何起作用的基本答案
- Pytorch学习|sklearn-SVM 模型保存、交叉验证与网格搜索
- 旅途碎碎念
- jvm|【JVM】JVM08(java内存模型解析[JMM])
- 时间管理的任务模型
- 《DOM知识点总结》
- 目标管理模型的应用案例
- 学员+12组+谢翀+【202002训练营-W3D4-GROW模型】
- 前端开发者的福音!通过拖拽就可生成Vue代码的平台来了!