一盏路灯 2020-10-17 02:15
浏览 594

如何让我的物体围绕着自己的中心点旋转在OpenGL中?

我现在有一个机器人, 机器人的中心点是(0.5f,0.0f,-1.0f) 我可以围绕着中心点旋转, 但是当我移动机器人到新的位置后再旋转的话就不会围绕着中心点转动了。

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;
   }
}

应该如何解决这个问题 让我可以随时旋转我的机器人围绕着他的中心点?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 高德地图点聚合中Marker的位置无法实时更新
    • ¥15 DIFY API Endpoint 问题。
    • ¥20 sub地址DHCP问题
    • ¥15 delta降尺度计算的一些细节,有偿
    • ¥15 Arduino红外遥控代码有问题
    • ¥15 数值计算离散正交多项式
    • ¥30 数值计算均差系数编程
    • ¥15 redis-full-check比较 两个集群的数据出错
    • ¥15 Matlab编程问题
    • ¥15 训练的多模态特征融合模型准确度很低怎么办