【问题标题】:Matrix Multiplication opengl rotating around an object围绕对象旋转的矩阵乘法opengl
【发布时间】:2012-12-07 14:56:41
【问题描述】:

我创建了 2 个圆圈,一个围绕另一个旋转,就像月亮围绕太阳旋转一样。

我沿 z 轴平移,然后围绕 y 轴进行旋转以使物体进入轨道。我需要计算出矩阵乘法 yRotation * ZTranslation * (0,0,0,1)

即

(cos(angle)   0  sin(angle)  0  ) ( 1  0  0   0   ) ( 0 )
(    0        1      0       0  ) ( 0  1  0   0   ) ( 0 )
(-sin(angle)  0  cos(angle)  0  ) ( 0  0  1 zTran ) ( 0 ) 
(    0        0      0       1  ) ( 0  0  0   1   ) ( 1 )

我该怎么做?

【问题讨论】:

    标签: c++ opengl


    【解决方案1】:

    既然你在谈论圆圈,我假设你正在制作一个 2D 应用程序。

    在 OpenGL 中,您有以下坐标:

       Y
       |
       |
       |
       O---- X
      /
     /
    Z
    

    这意味着您的 2D 应用程序位于 X-Y 空间中,Z 垂直于显示器(并且朝向外部)。

    所以,如果你有一个圆围绕另一个圆,你可能打算先在 X-Y 平面上平移这个圆(例如在 Y 轴上),然后在 Z上应用一个旋转> 轴。

    所以你的矩阵乘法应该是:

    (cos(angle)   sin(angle)  0  0 ) ( 1  0  0   0   ) ( circle_center_x )
    (-sin(angle)  cos(angle)  0  0 ) ( 0  1  0 yTran ) ( circle_center_y ) 
    (    0            0       1  0 ) ( 0  0  1   0   ) (        0        )
    (    0            0       0  1 ) ( 0  0  0   1   ) (        1        )
    

    或者只是二维:

    (cos(angle)   sin(angle) 0 ) ( 1  0   0   ) ( circle_center_x )
    (-sin(angle)  cos(angle) 0 ) ( 0  1 yTran ) ( circle_center_y ) 
    (    0            0      1 ) ( 0  0   1   ) (        1        )
    

    使用 OpenGL 函数:

    glRotatef(angle, 0, 0, 1);
    glTranslatef(0, yTran, 0);
    glBegin(GL_LINE_LOOP);
    for (...)
        /* points of circle around circle_center_x/y */
    glEnd();
    

    请注意,在 OpenGL 中,矩阵在右侧相乘。所以如果你在glTranslatef 之前写glRotatef,旋转将在翻译之后应用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多