复制到一个表面上,随机旋转,有方向

N旋转跳跃.gif

下载场景:文件:rotate_around_n.hipnc

崎岖地形上的树木,更大的猪上的猪,球体上的图形鸡,通常的钻头。坐在一个表面上很容易,分散,继承@N,复制的对象将把它们的z轴指向@N。要围绕@N 随机旋转它们,您可以使用随机@up,但是我们想要一些更可控的东西?

您可以分两步完成此操作;使用二面角创建一个矩阵,将 {0,0,1} 向量旋转到 @N,然后围绕 @N 旋转该矩阵。将该矩阵转换为@orient,您就完成了。

  1. matrix3 m = dihedral({0,1,0},@N);
  2. rotate(m, @Time+rand(@ptnum)*ch('rot_rand'), @N);
  3. @orient = quaternion(m);

我相信有一种更有效的方法,如果您知道,请与我们联系!(更新:有,见下文……)