0

假设我们有一个正方形,在它被平移到某个位置后,我想围绕对象内的一个点旋转它。

     glPushMatrix();
       glTranslatef(50, 50, 0.0);
       glRotatef(joint, 0.0, 0.0, 1.0);
       glScalef(10,20, 1.0);
       glTranslatef(0.0, -0.5, 0.0);
       glColor3f(1.0, 0.0, 0.0);
       drawSquare(1.0);
     glPopMatrix();

上面的那个只在缩放后围绕 (0.0) 点旋转。如果我将 glRotatef(joint, 0.0, 0.0, 1.0) 更改为 glRotatef(joint, 0.0, 5.0, 1.0),则对象开始扭曲。

在此处输入图像描述

4

1 回答 1

1

OpenGL 中的旋转围绕位于原点 (0, 0, 0) 的轴旋转。为了围绕特定点旋转,您首先需要将该点平移到原点,然后执行旋转。在 OP 中,您将围绕点 (-50,-50, 0) 旋转(因为平移移动坐标系,而不是特定点),然后围绕Z轴旋转关节度数。

从 OP 来看,假设每帧都更新关节,我希望该代码具有围绕点 (-50, -50, 0) 运行的正方形。

于 2013-01-30T05:41:25.613 回答