Ios OpenGL:通过对象的末端(而不是中心)旋转对象

Ios OpenGL:通过对象的末端(而不是中心)旋转对象,ios,opengl-es,Ios,Opengl Es,我试图通过立方体的角点旋转立方体,而不是从中心旋转。这是可能的还是我需要旋转然后重新定位。我试图模拟一只手臂上下摆动 // leg arm glVertexAttrib4f(2,1, 1,0, self.color.a); self.modelViewMatrix = GLKMatrix4MakeTranslation(self.position.x + 0.45,self.position.y + 0.1, self.position.z - 0.65);//(float)x,

我试图通过立方体的角点旋转立方体,而不是从中心旋转。这是可能的还是我需要旋转然后重新定位。我试图模拟一只手臂上下摆动

// leg arm
    glVertexAttrib4f(2,1, 1,0, self.color.a);
    self.modelViewMatrix = GLKMatrix4MakeTranslation(self.position.x + 0.45,self.position.y + 0.1, self.position.z - 0.65);//(float)x, (float)y, -1.5f)
    self.modelViewMatrix = GLKMatrix4Rotate(self.modelViewMatrix,self.leftArmRotation, 1.0 ,0.0 ,0.0);
    self.modelViewMatrix = GLKMatrix4Scale(self.modelViewMatrix, 0.2, 0.2, 0.9);
    self.modelViewMatrix = GLKMatrix4Multiply(eyeBaseModelViewMatrix, self.modelViewMatrix);

    normalMatrix = GLKMatrix3InvertAndTranspose(GLKMatrix4GetMatrix3(self.modelViewMatrix), NULL);
    modelViewProjectionMatrix = GLKMatrix4Multiply(self.projectionMatrix, self.modelViewMatrix);

    glUniformMatrix4fv(uniforms[UNIFORM_MODELVIEWPROJECTION_MATRIX], 1, 0, modelViewProjectionMatrix.m);
    glUniformMatrix3fv(uniforms[UNIFORM_NORMAL_MATRIX], 1, 0, normalMatrix.m);

    glDrawArrays(GL_TRIANGLES, 0, 36);

    // right arm
    glVertexAttrib4f(2,1, 1,0, self.color.a);
    self.modelViewMatrix = GLKMatrix4MakeTranslation(self.position.x - 0.45,self.position.y + 0.1, self.position.z - 0.65 );//(float)x, (float)y, -1.5f)
    self.modelViewMatrix = GLKMatrix4Scale(self.modelViewMatrix, 0.2, 0.2, 0.9);
    self.modelViewMatrix = GLKMatrix4Multiply(eyeBaseModelViewMatrix, self.modelViewMatrix);

    normalMatrix = GLKMatrix3InvertAndTranspose(GLKMatrix4GetMatrix3(self.modelViewMatrix), NULL);
    modelViewProjectionMatrix = GLKMatrix4Multiply(self.projectionMatrix, self.modelViewMatrix);

    glUniformMatrix4fv(uniforms[UNIFORM_MODELVIEWPROJECTION_MATRIX], 1, 0, modelViewProjectionMatrix.m);
    glUniformMatrix3fv(uniforms[UNIFORM_NORMAL_MATRIX], 1, 0, normalMatrix.m);

    glDrawArrays(GL_TRIANGLES, 0, 36);

下面是我对一个非常相似的问题的回答:。为什么首先定位它是一个问题?要改变“锚定点”,你的第一个矩阵运算应该是按锚平移,从这里开始,所有的运算都应该像你已经有顶点数据一样工作,这样锚定点就为零。我不认为你可以给出一个例子,因为我的大脑受到了伤害。你是建议移动它,旋转它,然后向后移动,我不需要计算角度来计算它的新位置吗