用three.js做三维模型的时候,需要通过鼠标滑轮向前来控制视角朝鼠标的位置放大,然后通过鼠标滑轮向后将视角复原。
使用three.js自带的raycaster.setFromCamera()好像有点偏差,如果要求精度不高可以将就用。
不过自己还是动手算了一个比较准确的角度,代码放到这里:
class MyControls {
constructor(camera, domElement) {
this.moveX = 0; //x轴移动的累积量
this.moveY = 0; //y轴移动的累积量
this.moveZ = 0; //z轴移动的累积量
const limitZ = 7; //z轴移动次数限制
const z_stepMove = 3; //每次z轴移动距离
this.theta = 0; //初始视角水平角,单位为度
this.phi = 0; //初始视角俯仰角,单位为度
this.domElement = domElement;
const _this = this;
function onMouseWheel(event) {
// 通过滑轮实现视角向鼠标位置的放大和缩小
let verFullAngle = angle2phi(camera.getEffectiveFOV()); //视锥体垂直视野弧度
let horFullAngle =
2 *
Math.atan(
(window.innerWidth / window.innerHei