作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否有可能将四元数限制为仅在 x 和 y 轴上移动(例如在 Eulers-yaw 和 pitch 中,没有滚动)?我有什么方程式或类似的东西可以做到这一点吗?
一些例子:
运动应该像这样:http://360.art.pl/experimental/1/
但是当我在四元数上构建我的播放器时,它没有限制,我不知道如何修复它 http://360.art.pl/experimental/2/
最佳答案
您可以尝试直接从 yaw/pitch 构造四元数:
q = quat_from_axis_angle(up_vector, yaw) * quat_from_axis_angle(local_right, pitch)
rotated_right = apply_rotation(q, local_right);
projected_right = rotated_right - dot(rotated_right, up_vector) * up_vector;
realign = quat_align_vector(rotated_right, normalized(projected_right));
q = realign * q
projected_right
这是
rotated_right
的投影到水平面上。如果不滚动,这两个向量必须相同,这意味着
dot(rotated_right, up_vector) = 0
.最后一个等式是必须满足的实际约束。在
q
中是二次的.例如。为
local_right=(1,0,0)
, 和
up_vector=(0,0,1)
,变成
dot(q*(1i+0j+0k)*conj(q), 0i+0j+1k)=2*x*z-2*w*y=0
, 与
q=w+xi+yi+zk
.
quat_from_axis_angle
的公式和
apply_rotation
在
http://en.wikipedia.org/wiki/Quaternion和
http://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation .至于
quat_align_vector
,一种方法是
quat_align_vector(src, dst) = sqrt([dot(src, dst), cross(src, dst)])
[a, b]
用实部生成四元数
a
, 和一个虚部
b
.
Sqrt(x)
可以计算为
exp(ln(x)/2)
(这些功能也在 wiki 上)。你也可以尝试用
exp(ln(x)/2*tick*realign_rate)
替换 sqrt为了平滑恢复向上向量:)。或者反其道而行之,稍微简化一下公式:
quat_align_vector(src, dst) = [dot(halfway, dst), cross(halfway, dst)],
halfway = normalized(normalized(src) + normalized(dst))
关于3d - 四元数 - 如何限制轴?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11646863/
我是一名优秀的程序员,十分优秀!