You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

three.js r91中PointerLockControls相机非原点时旋转异常求助

解决PointerLockControls相机旋转异常问题

我来帮你排查这个旋转异常的问题——核心原因是你没搞清楚PointerLockControls的层级结构:

PointerLockControls内部是这样的:controls.getObject()是一个空的Object3D容器,相机默认是作为这个容器的子对象,且位置在容器的原点(0,0,0)。当你开启指针锁定后,鼠标控制的是这个容器的旋转,而非相机本身。

你现在的代码里同时设置了camera.position.set(100, 0, 0)controls.getObject().position.set(100, 0, 0),这相当于把相机在容器里也偏移了100单位,此时容器旋转时,相机就会绕容器的原点(而不是自身中心)做圆周运动,这就是你看到的“围绕其他点旋转”的问题。

正确的解决方案

只需要保留对controls.getObject()的位置设置,同时把相机的位置重置回容器原点,确保相机是在容器中心被旋转:

// 不要直接设置camera的position,把它重置回容器原点
camera.position.set(0, 0, 0); 
controls = new THREE.PointerLockControls(camera);
// 只需要设置容器的位置,相机作为子对象会跟着移动
controls.getObject().position.set(100, 0, 0); 
scene.add(controls.getObject());

这样调整后,鼠标环视时,容器带着相机旋转,相机自身在容器中心,旋转就会是围绕自身的正常效果了。

内容的提问来源于stack exchange,提问作者zwcloud

火山引擎 最新活动