Better

Ethan的博客,欢迎访问交流

rotate in three.js

之前被项目中的旋转搞晕了……

在 three.js 中实现旋转的几种方式

  • rotation:物体的局部旋转
  • rotateY:物体的局部旋转,rotateY(rad) = rotation.y += rad
  • rotateOnAxis:根据局部空间的标准化向量旋转,可自行指定任意空间
  • rotateOnWorldAxis:根据世界空间的标准化向量旋转

确定参考点以及方向向量

  • 参考点 align point 无论如何都是物体的 position 属性
  • 具体方向看具体使用方式
    • rotateOnAxis 参考局部空间,自身是否存在平移、旋转
    • rotateOnWorldAxis 参考世界空间

项目中奇怪的现象就可以解释了

  • 由于要配合大地旋转,因此对象也需要旋转 90 度,元素之间可能有层级的高度差。元素设置 Z 后,与此同时元素也旋转 90 度添加到场景不符合预期,但给每个元素套一个 Group 后就正常了
  • 原因就出在参考点上,直接添加对象,对于旋转和平移都作用在物体上,它的参考点是物体自身的 position。套用 Group 后,旋转作用在 Group 上,同时 Group 的参考点默认是原点
  • ……,好好思考吧,总是就是参考点发生了变化


留言