C++ 是否围绕某个点旋转对象,即使原始轴不同?

C++ 是否围绕某个点旋转对象,即使原始轴不同?,c++,opengl,matrix,C++,Opengl,Matrix,即使原始旋转点是(0,0,0),如何旋转一个对象(比如说,它的位置是(5,5,0)),而轴心点是(3,4,0) 下面是一个图形说明: 我想相对于自定义轴点旋转对象。在blender中制作对象的方式应确保对象远离原点(在点(5,5,0)) 我们如何使用矩阵来解决这个问题?正如评论中已经指出的那样,最简单的方法是平移对象,使轴点位于原点,然后围绕原点旋转对象,然后将其平移回去。这些步骤中的每一步都可以使用矩阵来完成;将这些矩阵相乘应该会得到一个同时完成所有这些操作的矩阵 在给定的示例中,这些矩阵

即使原始旋转点是(0,0,0),如何旋转一个对象(比如说,它的位置是(5,5,0)),而轴心点是(3,4,0)

下面是一个图形说明:


我想相对于自定义轴点旋转对象。在blender中制作对象的方式应确保对象远离原点(在点(5,5,0))


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

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

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

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 ]

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

虽然可以这样做,但为什么不首先将其移动到原点?可能的跨站点重复:无论您如何操作,都相当于将对象移动到原点,围绕原点旋转,然后往后退。相当不清楚你的问题是什么相当简单的概念,在电枢层次结构中,每根骨骼都有一个孩子或一个家长。如果要移动手臂,则需要移动手、手指和该手臂的所有子对象,并且要相对于手臂(轴点)而不是整个网格的轴点移动它们。因此,如何根据手臂枢轴点而不是整个对象的枢轴旋转手臂的所有子对象。策略始终相同,移动对象使对象围绕原点旋转,然后围绕原点旋转,然后再将对象移回原点