我正在尝试创建3D四边形并四处移动。我不知道四边形的方向。
这是我到目前为止的代码:
void draw(){
glPushMatrix();
//update the central point of the quad
newX = 0.5 + xr;
newZ = -1.0 + zr;
glTranslatef(newX, 0.0, newZ);
glRotatef(robotAngle, 0.0, 1.0, 0.0);
glTranslatef(-newX, 0.0, -newZ);
drawQuad();
glPopMatrix();
}
void drawQuad(){
glPushMatrix();
// Front
glBegin(GL_QUADS);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex3f(0.0f + xr, 0.0f, 0.0f + zr);
glVertex3f(1.0f + xr, 0.0f, 0.0f + zr);
glVertex3f(1.0f + xr, 1.0f, 0.0f + zr);
glVertex3f(0.0f + xr, 1.0f, 0.0f + zr);
glEnd();
// Back
glBegin(GL_QUADS);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex3f(0.0f + xr, 0.0f, -2.0f + zr);
glVertex3f(1.0f + xr, 0.0f, -2.0f + zr);
glVertex3f(1.0f + xr, 1.0f, -2.0f + zr);
glVertex3f(0.0f + xr, 1.0f, -2.0f + zr);
glEnd();
glColor3f(1, 0, 1);
glBegin(GL_QUAD_STRIP);
glVertex3f(0.0f + xr, 0.0f, 0.0f + zr);
glVertex3f(0.0f + xr, 0.0f, -2.0f + zr);
glVertex3f(1.0f + xr, 0.0f, 0.0f + zr);
glVertex3f(1.0f + xr, 0.0f, -2.0f + zr);
glVertex3f(1.0f + xr, 1.0f, 0.0f + zr);
glVertex3f(1.0f + xr, 1.0f, -2.0f + zr);
glVertex3f(0.0f + xr, 1.0f, 0.0f + zr);
glVertex3f(0.0f + xr, 1.0f, -2.0f + zr);
glEnd();
}
void specialkey(unsigned char key, int x, int y)
{
switch (key) {
case 's':
robotAngle += 1.0;
glutPostRedisplay();
break;
case 'S':
robotAngle -= 1.0;
glutPostRedisplay();
break;
}
}
void directionkey(int key, int x, int y)
{
switch (key) {
case GLUT_KEY_LEFT:
xr -= 0.05;
glutPostRedisplay();
break;
case GLUT_KEY_RIGHT:
xr += 0.05;
glutPostRedisplay();
break;
}
}
四边形可以在其原始位置绕其中心点旋转。但是,一旦我开始移动四边形,它只会沿x轴移动,而不是四边形的方向。
我该如何解决这个问题?
答案 0 :(得分:0)
请勿通过xr
和zr
修改顶点坐标:
glVertex3f(0.0f + xr, 0.0f, 0.0f + zr);
glVertex3f(0.0f, 0.0f, 0.0f);
旋转模型后,使用glTranslatef
移动模型。在下面的pivotX
和pivotZ
中,常数a不变:
void draw(){
float pivotX = 0.5f; // center of the model
float pivotZ = -1.0f;
glPushMatrix();
glTranslatef(xr, 0.0, zr);
glTranslatef(pivotX, 0.0, pivotZ);
glRotatef(robotAngle, 0.0, 1.0, 0.0);
glTranslatef(-pivotX, 0.0, -pivotZ);
drawQuad();
glPopMatrix();
}
矩阵乘法与Commutative的顺序无关。