统一固定四元数旋转

     2023-04-12     19

关键词:

【中文标题】统一固定四元数旋转【英文标题】:Clamp a quaternion rotation in unity 【发布时间】:2021-12-07 17:49:29 【问题描述】:

我有这段代码,但我无法找到一个合适的解决方案来将 X 轴夹在 2 个角度值之间。这种情况下怎么办?

public class CameraController : MonoBehaviour 
    public float cameraSmoothness = 5f;

    private Quaternion targetGlobalRotation;
    private Quaternion targetLocalRotation = Quaternion.Identity;

    private void Start()
        targetGlobalRotation = transform.rotation;
    

    private void Update()
        targetGlobalRotation *= Quaternion.Euler(
            Vector3.up * Input.GetAxis("Mouse X"));
        
        targetLocalRotation *= Quaternion.Euler(
            Vector3.right * -Input.GetAxis("Mouse Y"));

        transform.rotation = Quaternion.Lerp(
            transform.rotation,
            targetGlobalRotation * targetLocalRotation,
            cameraSmoothness * Time.deltaTime);
    

【问题讨论】:

好吧,我找到了一个可能的解决方案,以防它适用于某人:codeif(transform.rotation.x * 180f > yAxisMin && Input.GetAxis("Mouse Y") > 0 || transform.rotation.x * 180f code 其中yAxisMin和yAxisMax是y的最小值和最大值 但它仍然不能 100% 工作 【参考方案1】:

为此,您宁愿使用欧拉角,并且仅在应用夹子后将它们转换为Quaternion

切勿直接触摸Quaternion 的各个组件,除非您真的知道自己在做什么!一个Quaternion四个 组件xyzw,它们都在-11 的范围内移动,所以你尝试的意义不大;)

可能是这样的,例如

// Adjust via Inspector
public float minXRotation = 10;
public float maxXRotation = 90;

// Also adjust via Inspector
public Vector2 sensitivity = Vector2.one;

private float targetYRotation;
private float targetXRotation;

private void Update()

    targetYRotation += Input.GetAxis("Mouse X")) * sensitivity.x;      
    targetXRotation -= Input.GetAxis("Mouse Y")) * sensitivity.y;

    targetXRotation = Mathf.Clamp(targetXRotation, minXRotation, maxXRotation);

    var targetRotation = Quaternion.Euler(Vector3.up * targetYRotation) * Quaternion.Euler(Vector3.right * targetXRotation);

    transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, cameraSmoothness * Time.deltaTime);

【讨论】:

再次感谢,我刚开始,四元数很棘手

四元数法

四元数法概念四元数是一种用于表示旋转和方向的数学对象,它由一个实部和三个虚部组成。四元数可以用来替代旋转矩阵,在计算机图形学、机器人学、物理学等领域有广泛的应用。四元数的一般形式为:q=a+bi+cj+dk,其中a,b,c,... 查看详情

将四元数旋转转换为旋转矩阵?

】将四元数旋转转换为旋转矩阵?【英文标题】:ConvertQuaternionrotationtorotationmatrix?【发布时间】:2010-12-0602:08:54【问题描述】:基本上,给定一个四元数(qx,qy,qz,qw)...如何将其转换为OpenGL旋转矩阵?我也对哪个矩阵行是“上”、... 查看详情

四元数绕轴旋转的分量

】四元数绕轴旋转的分量【英文标题】:Componentofaquaternionrotationaroundanaxis【发布时间】:2011-04-1016:49:40【问题描述】:我无法找到有关此主题的任何有用信息。基本上我想找到四元数旋转的分量,即围绕给定轴(不一定是X、Y或Z... 查看详情

四元数运动学笔记旋转的雅克比矩阵

1.相对于旋转向量的雅克比2.相对于四元数的雅克比2.1相关公式2.2推导雅克比1.相对于旋转向量的雅克比这里在全局系下利用左扰动进行推导:2.相对于四元数的雅克比2.1相关公式三叉积公式:纯实部的四元数和四元数相乘,这里是... 查看详情

osg四元数quat

四元数是通过使用四个数来表达方位,其目的是避免旋转过程中的万向锁问题。所以在3D中,四元数的主要用途即是用于旋转。从数学意义上讲,四元数是扩展了复数系统,它使用三个虚部i,j,k,一个四元数[x,y,z,w]定义了复数w+xi+... 查看详情

在 1 轴上旋转四元数?

】在1轴上旋转四元数?【英文标题】:rotatingaquaternionon1axis?【发布时间】:2011-05-2502:51:44【问题描述】:我有一个由四元数旋转的模型。我只能设置旋转,我不能添加或减去任何东西。我需要获取轴的值,然后为其添加一个角... 查看详情

unity--------------------四元数的旋转与原理

【Unity技巧】四元数(Quaternion)和旋转原文:http://blog.csdn.net/candycat1992/article/details/41254799 四元数介绍 旋转,应该是三种坐标变换——缩放、旋转和平移,中最复杂的一种了。大家应该都听过,有一种旋转的表示方法叫... 查看详情

从四元数到 OpenGL 旋转

】从四元数到OpenGL旋转【英文标题】:FromquaternionstoOpenGLrotations【发布时间】:2011-12-1719:28:30【问题描述】:我有一个我想通过按键旋转的对象。物体应该偏航、俯仰和滚动。在尝试了很多之后,我发现glRotate有它的局限性,不... 查看详情

四元数旋转opengl

】四元数旋转opengl【英文标题】:Quaternionrotationopengl【发布时间】:2011-11-2714:03:47【问题描述】:如果我创建一个quaternion,它代表例如玩家的方向和围绕这个旋转的角度。因此,对于应用程序,我打算让飞机飞行。四元数将代... 查看详情

四元数运动学笔记四元数和旋转相关的约定表述

1.四元数的约定表述1.1四元数表述的差异1.2HamiltonvsJPL1.2.1元素的顺序1.2.2左手系和右手系1.2.3旋转操作的对象1.2.4旋转操作的方向1.3文章采用的表述1.4扰动和时间导数1.4.1右扰动和左扰动1.4.2Hamilton表示下的(L-G)的四元数时间导数1... 查看详情

四元数旋转与旋转矩阵略有不同

】四元数旋转与旋转矩阵略有不同【英文标题】:quaternionrotationvs.rotationmatrixhaveaslightdifference【发布时间】:2019-02-1007:56:16【问题描述】:我有一个随时间变化的3D旋转,表示为围绕每个轴(滚动、俯仰、偏航)的瞬时旋转。我... 查看详情

四元数旋转

...0.0f-1.0f对应范围是0-180度 一个调用周期只能执行一个四元数变换,因为这次的变换在这次的逻辑循环还没有执行所以连续两条四元数赋值旋转只能执行最后一条,需要旋转多少度提前计算好。   正半轴旋转公式&nbs... 查看详情

两个四元数旋转的点积

】两个四元数旋转的点积【英文标题】:dotproductoftwoquaternionrotations【发布时间】:2014-02-2603:05:57【问题描述】:我知道两个四元数的点(或内)积是旋转之间的角度(包括轴旋转)。这使得点积等于四元数超球面上两点之间的... 查看详情

四元数(quaternion)和旋转(转)

http://blog.csdn.net/candycat1992/article/details/41254799 四元数介绍 旋转,应该是三种坐标变换——缩放、旋转和平移,中最复杂的一种了。大家应该都听过,有一种旋转的表示方法叫四元数。按照我们的习惯,我们更加熟悉的是... 查看详情

四元数quaternion

四元数的简单方法运用四元数在Unity3D中的作用就是拿来表示旋转。AngleAxis 创建一个旋转,绕着某个轴旋转,返回结果是一个四元数。 跟ToAngleAxis实现的是相反的功能。Angle 返回两个旋转值(四元数)之间的角度,返... 查看详情

什么是四元数旋转?

】什么是四元数旋转?【英文标题】:What\'saquaternionrotation?【发布时间】:2011-04-3016:55:29【问题描述】:四元数旋转是否只是对象将朝其旋转的带有X、Y、Z的向量,以及使对象绕其轴旋转的滚动?就这么简单吗?意思是如果你有... 查看详情

四元数(quaternion)和旋转

四元数介绍 旋转,应该是三种坐标变换——缩放、旋转和平移,中最复杂的一种了。大家应该都听过,有一种旋转的表示方法叫四元数。按照我们的习惯,我们更加熟悉的是另外两种旋转的表示方法——矩阵旋转和欧拉旋转... 查看详情

当我有两个方向四元数时,如何找到从一个到另一个所需的旋转四元数?

】当我有两个方向四元数时,如何找到从一个到另一个所需的旋转四元数?【英文标题】:WhenIhavetwoorientationquaternions,howdoIfindtherotationquaternionneededtogofromonetotheother?【发布时间】:2012-02-0513:22:46【问题描述】:我在我的游戏中使... 查看详情