Tag: 四元数

统一在最小和最大距离之间旋转

我试图让对象拖动成为可能。 这个对象只能旋转那么多。 (Similair到门口)。 这是编辑的代码,用于旋转有效的对象。 我有2个用于maxrotation和minrotation的载体。 只要用户拖动可交互对象,就会调用此代码。 (比如更新但仅在拖动时) if (GestureManager.Instance.IsNavigating && HandsManager.Instance.FocusedGameObject == gameObject) { //speed and navigiation of rotation float rotationFactor; rotationFactor = ManipulationManager.Instance.ManipulationPosition.y * RotationSensitivity; totransform.Rotate(new Vector3(rotationFactor, 0, 0)); } 如果我能在这里使用if语句会很棒。 我尝试了很多东西,但它仍然没有用。 如上所述,此处的代码粘贴有效。 对象应该是可拖动的,但只能达到某个点。 totransform是将被轮换的变换 任何想法都会很棒,也非常受欢迎。 亲切的问候。

找到两个四元数之间的旋转差异以校准两个坐标系

我需要按特定的数量偏移流式四元数据。 为此,我计划得到2之间的差异,然后将第一个偏移到第二个。 我很难找到2之间的区别。 使用此转换器 。 我正在运行此代码: public void convertQuat180() { Quaternion q = new Quaternion(0.65328f, 0.2706f, 0.65328f, -0.2706f); //45,180,0 Quaternion q180 = new Quaternion(0.70711f, 0, 0.70711f, 0); // 0,90,0 Quaternion result = q180 * Quaternion.Inverse(q); Console.WriteLine(result); } 我希望result如下: (euler) diff = 45, 90 , 0 但相反,我得到: 135,-180,0 我在哪里错了?

四元数到欧拉角算法 – 如何转换为’Y =向上’和用手之间?

我有一个在四元数和欧拉角之间转换的算法。 public static Vector3 ToEulerAngles(this Quaternion q) { // Store the Euler angles in radians Vector3 pitchYawRoll = new Vector3(); double sqw = qW * qW; double sqx = qX * qX; double sqy = qY * qY; double sqz = qZ * qZ; // If quaternion is normalised the unit is one, otherwise it […]

Unity3d – eulerAngles(本地和全球)与检查员完全不同

在gameObject的检查器中我使用的起始旋转是“-90”,但是当我运行print(transform.eulerAngles.x)我得到270(同样是transform.localEulerAngles.x )。 如果我向下倾斜gameObject ,检查器X值会变大(例如,到-85)。 打印的transform.eulerAngles.x也变大了,比如274。 事情变得奇怪: 如果我向上倾斜gameObject ,检查器x坐标会变小(例如,到-95),但应该是,但是打印的eulerAngle.x值变得eulerAngle.x (这里是274)。 因此,如果我从eulerAngle.x为270向上或向下旋转对象,则x值会增加。 我肯定在这里做错了,但经过大量的故障排除后我仍然无法弄清楚是什么。 有什么想法吗?

如何在当前设备方向启用陀螺仪相机

我想启用陀螺仪控制的摄像头onButtonClick事件,但我希望它从相机的当前位置开始。 目前,当陀螺仪启用时,它会将摄像机移动到新位置(可能是设备当前陀螺仪旋转),而不是将其留在原位并从该点开始旋转。 希望我有意义,但基本上我不希望用户注意到他们在游戏中看到的任何变化(即陀螺控制的摄像头,但用户不会注意到这种变化)。 这是我正在使用的代码: void Update () { Quaternion attitudeFix = new Quaternion (-gyro.attitude.x, -gyro.attitude.z, -gyro.attitude.y, gyro.attitude.w); Quaternion offsetRotation = initialGyroRotation * attitudeFix; rotation = initialRotation * offsetRotation; transform.rotation = rotation; } public void EnableGyro() { initialGyroRotation = Input.gyro.attitude; initialRotation = transform.rotation; Debug.Log(“initialRotation: ” + initialRotation.ToString()); Debug.Log(“transform.rotation: ” + transform.rotation.ToString()); Debug.Log(“initialGyroRotation: ” + initialGyroRotation.ToString()); } […]