【问题标题】:Changing the rotation point along with object moving in OpenGL?随物体在OpenGL中移动而改变旋转点?
【发布时间】:2021-01-23 02:49:31
【问题描述】:

我正在尝试制造一种可以沿 X 轴移动并围绕 Z 轴旋转的锤子武器。现在我的锤子有问题。锤子可以在一个固定的支点上绕 Z 轴旋转,但是当我将锤子移动到新位置然后旋转锤子时,锤子仍然围绕旧的支点旋转。

我尝试添加移动到旧枢轴点的距离,但它不起作用。我该如何解决这个问题?感谢您的帮助!

这是我的代码:

glPushMatrix();
//the rotation angle of Z-axis
glTranslatef(0.5f,1.0f,-1.0f);    //Back to original point
glRotatef(zr, 0.0f, 0.0f, 1.0f);  //Rotating
glTranslatef(-0.5f,-1.0f,1.0f);   //The rotation piovt point

//build weapon base
//the moving distant on X-axis
glPushMatrix();
glColor3f(1, 0, 0);
glTranslatef(0.5f+xr, 1.0f, -1.0f);
glRotatef(-90.0, 1.0, 0.0, 0.0);
quadratic = gluNewQuadric();
gluCylinder(quadratic, 0.2f, 0.2f, 2.0f, 50, 50);
glPopMatrix();

//build hammer
glPushMatrix();
glTranslatef(0.0+xr, 3.0f, -1.0f);
glRotatef(90.0, 0.0, 1.0, 0.0);
glColor3f(0, 1, 0);
quadratic = gluNewQuadric();
gluCylinder(quadratic, 0.2f, 0.2f, 1.0f, 50, 50);
glPopMatrix();

glPopMatrix();

【问题讨论】:

    标签: c++ opengl freeglut opengl-compat


    【解决方案1】:

    您也必须移动枢轴:

    float pivot_x = 0.5f + xr;
    glTranslatef(pivot_x, 1.0f, -1.0f);  //Back to original point
    glRotatef(zr, 0.0f, 0.0f, 1.0f);     //Rotating
    glTranslatef(-pivot_x, -1.0f, 1.0f); //The rotation piovt point
    

    【讨论】:

    • 谢谢您的回答,我忘了说锤子下面有一个底座,我已经尝试将x轴移动距离添加到枢轴点。但是,锤子的移动速度比底座快。
    • 我试过你的方法,效果很好!我还有一个问题。在我使用你的方法之前,我试图做同样的事情,但不同的是我直接将xr添加到像glTranslatef(-0.5f + xr,-1.0f,1.0f)这样的枢轴点,我没有先声明一个pivot_x。但是,这不起作用,我的锤子比我的基地移动得更快,你知道为什么吗?
    • @AllenLi 基础数学,-0.5f + xr不等于-(0.5f + xr)
    • 感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多