我正在尝试旋转一个对象(箭头),该对象的默认位置指向右侧。我一直在环顾四周,我正在使用glLoadIdentity()和glPushMatrix()以及glPopMatrix()作为仅在我的glBegin函数中旋转对象而不是整个场景的方法:
glLoadIdentity();
glPushMatrix();
glRotatef(5, 0.0f, 0.0f, 1.0f);
glBegin(GL_TRIANGLE_FAN);
glColor3f(1.0f, 0.0f, 1.0f);
glVertex2f(xx2-0.01, yy2);
glVertex2f(xx2-0.06, yy2+0.03);
glVertex2f(xx2-0.06, yy2-0.03);
glEnd();
glPopMatrix();
然而,它也会翻译我的箭头,而不是只旋转它。我是否需要将偏移量转换回原始位置?或者我做错了什么?
解决:
glLoadIdentity();
glPushMatrix();
glTranslatef(xx2, yy2, 0);
glRotatef(45, 0.0f, 0.0f, 1.0f);
glTranslatef(-xx2, -yy2, 0);
glBegin(GL_TRIANGLE_FAN);
glColor3f(1.0f, 0.0f, 1.0f);
glVertex2f(xx2-0.01, yy2);
glVertex2f(xx2-0.06, yy2+0.03);
glVertex2f(xx2-0.06, yy2-0.03);
glEnd();
glPopMatrix();
需要转换回中心(0,0,0),应用旋转然后回到它的原始位置(xx2,yy2,0)
答案 0 :(得分:5)
所有旋转都在原点附近。
所以是的,如果你想围绕其他点旋转,你必须从那个点转换到原点,旋转,然后再转换回来。
答案 1 :(得分:0)
您的代码是正确的,但您无法正常应用您的操作。具体来说,您需要先应用轮换,然后应用翻译。