我正在编写一个绘制2D三角形的应用程序,并根据其位置围绕其z轴旋转它。当用鼠标拖动三角形时,它的中间(t1.tx,t1.ty)会不断变化。问题在于,当我将三角形拖动到另一个位置时,它不是停留在旋转的位置,而是围绕其中心点以圆形路径旋转。
我做错了什么?我希望它在它的位置旋转。
void drawTriangle() {
glBegin(GL_POLYGON);
glColor3f((float)200/255, (float)200/255, (float)200/255);
glVertex2f(t1.tx, t1.ty + .2); // top point of triangle
glVertex2f(t1.tx - .2, t1.ty - .2); // left point
glVertex2f(t1.tx + .2, t1.ty - .2); // right point
glEnd();
}
void display() {
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glPushMatrix();
glTranslatef(t1.tx, t1.ty, 0); // move matrix to triangle's current center point
glRotatef(theta, 0, 0, 1.0); // rotate on z-axis
drawTriangle();
glPopMatrix();
glutPostRedisplay();
glutSwapBuffers();
}
答案 0 :(得分:1)
自从我做了这些事以来,它已经成为一个整体,但根据你所说的,我的第一个猜测是交换glTranslatef和glRotatef的顺序。您想在模型空间中旋转,然后转换为世界空间。
答案 1 :(得分:1)
我修好了。问题是我正在翻译矩阵,然后绘制到已翻译的矩阵上。我所做的是在矩阵的中心绘制我的三角形,因此它在矩阵平移时仍然在其当前位置移动和旋转。谢谢你的帮助。