我在实现一个可以拾取对象的机器人手臂时遇到了麻烦,因为glTranslate(),我在实现中的glRotate()调用每个机器人的每个部分都依赖于前一部分。
示例:
void drawRobo()
{
draw a Cylinder as Base;
glTranslate();
drawArmpart1();
glTranslate();
drawJoint1();
glRotate();
drawArmpart2();
glTranslate();
drawGrabbers(); // The claw or the endeffector
}
void drawObjects()
{
glTranslate();
drawCube() // Object
glTranslate();
drawSphere() // Object 2
}
void display()
{
drawRobo();
drawObjects();
glPostredisplay();
}
现在问题是当我使用glRotate()旋转末端执行器或抓取器时;我的物体也旋转了,我不想那样。我希望能够旋转关节和手臂,使其更接近物体,然后我想使用抓取器拾取它们。
我该如何处理?我在需要它们的所有地方都有glPushMAtrix()和glPopMatrix()命令。
答案 0 :(得分:4)
由于您遇到此问题,很明显您不具有适当的推送和弹出矩阵操作。你的伪代码应该是:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// setup view matrix
glPushMatrix();
// setup robot's world matrix
drawRobo();
glPopMatrix();
// setup object's world matrix
drawObjects();
glutPostRedisplay();
请注意,上次绘制调用不使用push / pop - 只是因为它是最后一次,因此您不需要在它之后恢复矩阵。