2024-5-22 Three.js 按鼠标位置缩放

        three.js的默认缩放为中心点,需求为将缩放位置改为光标所在位置。

// 添加滚轮事件
window.addEventListener('wheel', onScrollingEvents)

// 事件
function onScrollingEvents(event) {
	// 设置相机缩放比数值越大缩放越明显
	let factor = 1.2
	// 从鼠标位置转化为webgl屏幕坐标位置
	let mouseX = (event.clientX / renderer.domElement.width) * 2 - 1
	let mouseY = -(event.clientY / renderer.domElement.height) * 2 + 1
	let vector = new THREE.Vector3(mouseX, mouseY, 0)
	// 从屏幕向量转为3d空间向量
	vector.unproject(camera)
	// 相机偏移量
	vector.sub(camera.position).setLength(factor)
	// 判断缩放
	if (event.deltaY < 0) {
		// camera + vector
		camera.position.add(vector)
		controls.target.add(vector)
	} else {
		// camera - vector
		camera.position.sub(vector)
		controls.target.sub(vector)
	}
}

        代码能够实现需求,需要禁用OrbitControls 滚动,但缩放后产生bug,放大移动旋转模型,模型将不在相机视角中心,不知道怎么解决


        three.js的 OrbitControls 控件已经有了这个功能, zoomToCursor 属性

来源:https://github.com/mrdoob/three.js/pull/26165

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值