【问题标题】:Rotate object around a certain point, even if the original pivot is different?围绕某个点旋转对象,即使原始枢轴不同?
【发布时间】:2019-07-11 22:03:40
【问题描述】:

即使原始旋转点是(0 , 0, 0)?

这是一个图形解释:


我想相对于自定义枢轴点旋转对象。对象是在搅拌机中以这样的方式制作的,即对象远离原点(在点 (5, 5, 0))。

我们如何使用矩阵来解决这个问题?

【问题讨论】:

  • 虽然可以,但为什么不先把它移到原点呢?
  • 可能的跨站重复:math.stackexchange.com/q/2093314
  • 不管怎么做,都相当于把物体移动到原点,绕原点旋转,然后再往回移动。不太清楚你的问题具体是什么
  • 非常简单的概念,在骨架层次结构中,每个骨骼都有一个子项或父项。如果要移动手臂,您将移动手、手指和该手臂的所有子项,并且您希望相对于手臂(枢轴点)移动它们,而不是整个网格的枢轴点。那么如何根据手臂支点而不是整个对象的支点来旋转手臂的所有子项。
  • 策略总是一样的,移动对象,使对象围绕原点旋转,然后围绕原点旋转,然后将对象移回

标签: c++ opengl matrix


【解决方案1】:

正如 cmets 中已经指出的那样,最简单的方法是平移对象,使轴心点位于原点,然后围绕原点旋转对象,然后将其平移回来。这些步骤中的每一个都可以使用矩阵来完成;将这些矩阵相乘应该会产生一个矩阵,它可以一次完成所有这些操作。

在给定的示例中,这些矩阵将是:

1.translation by (-3,-4,0):
    [ 1, 0, 0,-3,
      0, 1, 0,-4,
      0, 0, 1, 0,
      0, 0, 0, 1 ]

2. rotation (in this example by 90 degrees)
    [ 0, 1, 0, 0,
     -1, 0, 0, 0,
      0, 0, 1, 0,
      0, 0, 0, 1 ]

3. translation by (3,4,0)
    [ 1, 0, 0, 3,
      0, 1, 0, 4,
      0, 0, 1, 0,
      0, 0, 0, 1 ]

这将导致以下矩阵作为最终转换:

    [ 0, 1, 0,-1,
     -1, 0, 0, 7,
      0, 0, 1, 0,
      0, 0, 0, 1 ]

您可能需要根据您的实现细节更改乘法顺序,但通常这应该可行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多