unity入门教程之使用四元数旋转向量

本文介绍如何在Unity中利用Quaternion进行3D向量旋转操作。通过一个具体实例展示了如何将向量(1,0,0)绕Y轴旋转90度,仅需一行代码即可实现。

3D的编程总会用到矩阵变换,缩放和平移都简单,旋转有点麻烦,但是unity提供四元数Quaternion进行旋转。

比如要把向量(1,0,0)绕Y轴旋转90度。

只需要Quaternion.AngleAxis(角度, 轴)* 向量就可以了。记住向量一定要放到“*”的右边。

示例代码

var vector3 = new Vector3(1,0,0);
var result =  Quaternion.AngleAxis(90, Vector3.up)* vector3;
得到的结果是(0,0,-1)。是不是很简单,赶紧试试吧。

### 将法向量转换为四元数Unity 中,通常情况下不会直接将一个法线矢量(normal vector)转换成四元数(quaternion),因为这两者表示的信息不同。然而,如果目的是为了创建一个旋转使得某个轴指向给定的方向,则可以实现这样的功能。 假设有一个表面的法线 `Vector3 normal` 并希望得到一个使 z 轴朝向该方向的旋转: ```csharp using UnityEngine; public class NormalToQuaternion : MonoBehaviour { public Vector3 normal; void Update() { // Ensure the normal is normalized. normal.Normalize(); // Create an up direction which should be perpendicular to our target rotation's forward. Vector3 arbitraryUpDirection = Vector3.Cross(normal, Vector3.up).normalized != Vector3.zero ? Vector3.up : Vector3.right; Vector3 finalUpDirection = Vector3.Cross(Vector3.Cross(arbitraryUpDirection, normal), normal); // Construct a quaternion from the desired forward and up directions. Quaternion q = Quaternion.LookRotation(normal, finalUpDirection); transform.rotation = q; // Apply this rotation to the object for demonstration purposes. } } ``` 这段代码首先计算了一个合适的 "up" 方向来辅助定义旋转矩阵[^1]。这是因为仅靠一个法线不足以完全决定物体的姿态;还需要指定哪个方向对应于对象的 “上”。这里通过交叉乘积找到一个垂直于目标法线的新向量作为临时的“右侧”,再基于此求得最终的“上方”。 一旦有了这两个正交的基础向量——即新的前向(`forward`) 和 上方 (`up`) ——就可以调用 `Quaternion.LookRotation(forward, upwards)` 来构建所需的四元数了[^2]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值