旋转前后的OpenGL平移

旋转前后的OpenGL平移,opengl,coordinate-transformation,opengl-compat,Opengl,Coordinate Transformation,Opengl Compat,以下是有关如何绘制机器人手臂和肩膀并通过用户输入旋转它们的代码(摘自): glPushMatrix(); glTranslatef (-1.0, 0.0, 0.0); glRotatef ((GLfloat) shoulder, 0.0, 0.0, 1.0); glTranslatef (1.0, 0.0, 0.0); glPushMatrix(); glScalef (2.0, 0.4, 1.0); glutWireCube (1

以下是有关如何绘制机器人手臂和肩膀并通过用户输入旋转它们的代码(摘自):

glPushMatrix();
    glTranslatef (-1.0, 0.0, 0.0);
    glRotatef ((GLfloat) shoulder, 0.0, 0.0, 1.0);
    glTranslatef (1.0, 0.0, 0.0);
    glPushMatrix();
        glScalef (2.0, 0.4, 1.0);
        glutWireCube (1.0);
    glPopMatrix();

    glTranslatef (1.0, 0.0, 0.0);
    glRotatef ((GLfloat) elbow, 0.0, 0.0, 1.0);
    glTranslatef (1.0, 0.0, 0.0);
    glPushMatrix();
        glScalef (2.0, 0.4, 1.0);
        glutWireCube (1.0);
    glPopMatrix();
glPopMatrix();  

glutSwapBuffers();
我理解绘制肩部和旋转肩部的代码。对于肩部:首先,我们将其沿x轴向后平移一个单位,以便在旋转时,它作为枢轴沿原点旋转。然后我们将其向后平移(在x轴上向前平移一个单位)。此转换将应用于已缩放的多维数据集

现在,我的问题是肘部。为什么在旋转前后x轴上都有向前的平移

现在,我的问题是肘部。为什么在旋转前后x轴上都有向前的平移

如果您想想象矩阵运算如何改变模型,那么您需要以相反的顺序“读取”运算。 这是因为矩阵堆栈的当前矩阵与新操作指定的矩阵相乘,矩阵以列大顺序存储(固定函数管道)

从肘部立方体开始

glutWireCube(1.0f);

量肘

glPushMatrix();
glScalef(2.0f, 0.4f, 1.0f);
glutWireCube(1.0f);
glPopMatrix();
glRotatef(45.0f, 0.0f, 0.0f, 1.0f);

把它移到右边

glTranslatef(1.0f, 0.0f, 0.0f);
glTranslatef(1.0f, 0.0f, 0.0f);
glTranslatef(1.0f, 0.0f, 0.0f);

转动肘部

glPushMatrix();
glScalef(2.0f, 0.4f, 1.0f);
glutWireCube(1.0f);
glPopMatrix();
glRotatef(45.0f, 0.0f, 0.0f, 1.0f);

将旋转的弯头向右移动

glTranslatef(1.0f, 0.0f, 0.0f);
glTranslatef(1.0f, 0.0f, 0.0f);
glTranslatef(1.0f, 0.0f, 0.0f);

绘制肩部立方体

glutWireCube(1.0f);

肩扛

glPushMatrix();
glScalef(2.0f, 0.4f, 1.0f);
glutWireCube(1.0f);
glPopMatrix();

将手臂(肘部和肩部)向右移动

glTranslatef(1.0f, 0.0f, 0.0f);
glTranslatef(1.0f, 0.0f, 0.0f);
glTranslatef(1.0f, 0.0f, 0.0f);

转动手臂

glRotatef(-15.0f, 0.0f, 0.0f, 1.0f);

将臂移动到其最终位置(向左)


首先,感谢您的回复。我现在明白了。但我的问题是,为什么我们首先沿着轴向前移动肘部一个单位(在旋转之前)。为什么我们不先将肘部向左移动一个单位,就像我们移动肩膀一样?