即使原始枢轴不同,也可以围绕某个点旋转对象?

时间:2019-02-18 13:44:19

标签: c++ opengl matrix

如何旋转对象(假设它的位置在(5,5,0)),而将枢轴点设置为(3,4,0),即使原始旋转点是(0 ,0,0)?

以下是图形说明:

explain

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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 ]

您可能需要根据实现细节来更改乘法顺序,但是一般来说应该可以。