这个问题让我很头疼。我正在尝试实现基于鼠标输入的Cannon.Body的旋转。通过使用(Cannon) Three FPS示例进行演示,您可以了解问题所在。
当您运行代码并通过单击"click to play“区域启用pointerlockcontrol,并按W 1秒以使球体进入摄影机的视图时,您将看到球体通过应用速度根据WASD键移动。如果移动鼠标,则会将四元数应用于身体,并计算适当的速度。现在旋转180度,X轴上的旋转现在以某种方式被取消。向上移动鼠标时,球体将向下旋转。
如何解决这样的问题呢?也许我在其他地方做错了什么,这可能会扰乱四元数?
也许我应该提一下,在playerc
我有一组三维坐标。我写了一些函数,可以使用四元数乘法旋转3d向量。为此,我需要一个轴来旋转点。轴需要是单位向量,我写了一个函数,可以归一化给定的向量。我尝试过使用一些简单的四元数(围绕x,y和z轴旋转),它可以工作。
我将一个3d对象表示为一个坐标列表。我想以每一种可能的方式旋转对象。例如,如果我以1度为增量,我会希望对象每增加1度就旋转一次,这将涉及(360)(360)(360)不同的方向(至少我这么认为)。或者如果我以10度的增量做同样的事情,(36)(36)(36)。这一切都很好,但是我如何想出一个轴来旋转呢?
例如,如果我写
for x in range (0, 360, 1
目前,我在three.js中使用鼠标位置和(0,1)的点积来生成弧度来旋转对象
下面的代码,工作正常,但对象“跳跃”,因为当clientX值在window.innerWidth / 2之间时,弧度角度从正跳到负
onDocumentMouseMove : function(event) {
// rotate circle relative to current mouse pos
var oldPos = new THREE.Vector2(0, 1);
Template.Main.mouseCurrPos = new THREE.Vector2((event.