c++ - 围绕某个点旋转对象,即使原始枢轴不同?

标签 c++ opengl matrix

你怎么能旋转一个物体(比方说,它的位置在(5, 5, 0)),枢轴点在比方说(3, 4, 0),即使原来的旋转点是(0 , 0, 0)?

这是一个图形解释:

explain

我想相对于自定义枢轴点旋转对象。对象在 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 ]

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

关于c++ - 围绕某个点旋转对象,即使原始枢轴不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54748669/

相关文章:

c++ - 使用 GL_RGBA16F_ARB 纹理时,它只包含废话,但我没有收到任何错误消息

c++ - OpenGL:新窗口显示当前打开窗口的内容

java - Hadoop mapreduce中大数据的矩阵乘法

c++ - 为什么 C++ 作用域解析运算符是::?

c++ - 复制多态对象

c++ - 将函数的 int 参数类型转换为 char

python - Numpy 2D Array - Power Of - 不返回答案?

c++ - 除法为负股息,但四舍五入为负无穷大?

c++ - XCode 项目无法识别某些 GLUT 命令

r - 如何将数据帧的列转换为数值向量