【发布时间】:2020-10-16 15:51:54
【问题描述】:
我正在尝试创建一个 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 轴移动,而不是我的四边形所面对的方向。
我该如何解决这个问题?
【问题讨论】:
-
如果你想改变z位置,那么你需要改变zr。如何改变 xr 和 zr 以使机器人朝着它所面对的方向前进?为此,是时候进行一些数学运算了!
-
@tadman 这是一种绕原点以外的点旋转的简单方法
-
@user253751 是的,我现在正试图找出方向向量,我的四边形的中心点是 x 和 z 点。
-
@user253751 很公平。我想我已经习惯了照顾父母。
-
@KanzakiAriaEcho
pivotX和pivotZ依赖于xr和zr。当您更改xr和zr时,您也必须更改pivotX和pivotZ。