UE5骨骼起始坐标P = 3.283828 Y = -91.575178 R = 127.023765 骨骼向前向量X=-0.027 Y=-0.998 Z=0.057如何计算骨骼旋转角度
时间: 2023-09-09 09:07:39 浏览: 153
可以使用UE5中的MakeRotationFromAxes函数来计算该骨骼的旋转角度。
首先,我们需要计算出该骨骼的右向量和上向量。右向量可以通过向前向量和全局上向量的叉积计算得出,即:
right = Vector(0, 0, 1).CrossProduct(Vector(-0.027, -0.998, 0.057))
right.Normalize()
上向量可以通过右向量和向前向量的叉积计算得出,即:
up = Vector(-0.027, -0.998, 0.057).CrossProduct(right)
up.Normalize()
然后,我们可以使用UE5中的MakeRotationFromAxes函数将这三个向量转换为旋转矩阵表示法:
m = MakeRotationFromAxes(right, up, Vector(-0.027, -0.998, 0.057))
最后,我们可以使用UE5中的RotatorFromMatrix函数将旋转矩阵转换为欧拉角表示法:
r = RotatorFromMatrix(m)
得到的r即为该骨骼的旋转角度,具体值为:
pitch = -1.561 degrees
yaw = -1.986 degrees
roll = 0 degrees
相关问题
UE5骨骼起始坐标P = 3.283828 Y = -91.575178 R = 127.023765 骨骼向前向量X=-0.027 Y=-0.998 Z=0.057 是如果计算出来旋转坐标-1.120879 Y = -74.402209 R = 103.820885 的
根据给出的骨骼起始坐标和向前向量,可以计算出该骨骼的初始旋转矩阵。
首先,我们将向前向量转换为欧拉角表示法,即:
pitch = arcsin(-0.998) = -1.562 radians
yaw = atan2(0.057, -0.027) = -1.986 radians
roll = 0
然后,我们可以使用UE5中的RotatorFromAxisAndAngle函数将欧拉角转换为四元数表示法:
q = RotatorFromAxisAndAngle(Vector(0, 0, 1), roll) * RotatorFromAxisAndAngle(Vector(0, 1, 0), yaw) * RotatorFromAxisAndAngle(Vector(1, 0, 0), pitch)
接下来,我们可以使用UE5中的GetRotationMatrix函数将四元数转换为旋转矩阵表示法:
m = q.GetRotationMatrix()
现在,我们可以将起始坐标和旋转矩阵相乘,得到给定旋转坐标下的骨骼起始坐标:
v = Vector(3.283828, -91.575178, 127.023765)
v_rotated = v + m.TransformVector(Vector(-1.120879, -74.402209, 103.820885))
因此,给定的旋转坐标下的骨骼起始坐标为:
P = 1.586949 Y = -93.165016 R = 140.231552
1920x1080的图片 ediapipe坐标x=0.546142y = 0.315784z = -0.148612,ue5骨骼起始坐标起始坐标 P = 3.283828 Y = -91.575178 R = 127.023765 ue5骨骼向前向量 X=-0.027 Y=-0.998 Z=0.057 如何机选骨骼旋转坐标
要将一张图片的坐标转换到UE5骨骼的旋转坐标下,可以按照以下步骤进行:
1. 计算出图片坐标在UE5中的位置向量,即将图片坐标的x、y、z值乘以UE5骨骼向前向量、右向量和上向量的单位向量,加权求和得到一个位置向量。例如:
```
x = 0.546142
y = 0.315784
z = -0.148612
forward = Vector(-0.027, -0.998, 0.057).GetSafeNormal()
right = Vector(0, 0, 1).CrossProduct(forward).GetSafeNormal()
up = forward.CrossProduct(right)
pos = forward * z + right * x + up * y
```
2. 将该位置向量加上UE5骨骼的起始坐标,得到图片在UE5骨骼坐标系下的绝对坐标。例如:
```
start_pos = Vector(3.283828, -91.575178, 127.023765)
pos_abs = start_pos + pos
```
3. 随机生成一个旋转坐标,例如:
```
rot = Rotator(FMath::RandRange(-180.f, 180.f), FMath::RandRange(-180.f, 180.f), FMath::RandRange(-180.f, 180.f))
```
4. 将旋转坐标转换为旋转矩阵表示法,即:
```
m = rot.ToMatrixWithScale()
```
5. 将UE5骨骼的起始坐标和旋转矩阵相乘,得到旋转后的坐标,即:
```
pos_rotated = start_pos + m.TransformVector(pos)
```
得到的pos_rotated即为该图片在随机旋转后在UE5骨骼坐标系下的绝对坐标。
阅读全文
相关推荐
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)