【发布时间】:2014-05-31 15:32:31
【问题描述】:
我有以下代码:
void drawObj1(){
glPushMatrix();
glTranslatef(rBaseInitPos + (rBaseDim[0] / 2), rBaseDim[1] + baseIncrement + rBaseDim[1] / 2, rBaseDim[2] / 2);
glRotatef(rBaseArmRotateAngle, 0, 1, 0);
/*
glPushMatrix();
*/
drawRobotBaseArm();
/*
glPopMatrix();
*/
glPushMatrix();
glRotatef(90, 1, 0, 0);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, rCamouflage[0]);
gluQuadricTexture(obj, GL_TRUE);
gluQuadricDrawStyle(obj, GLU_FILL);
gluDisk(obj, 0, (rBaseDim[0] / 2) - 0.5, 16, 4);
gluCylinder(obj, (rBaseDim[0] / 2) - 0.5, (rBaseDim[0] / 2) - 0.5, rBaseDim[1] / 2, 16, 4);
glDisable(GL_TEXTURE_2D);
glPopMatrix();
glPopMatrix();
}
void drawScene(){
glTranslatef(X, Y, Z);
drawObj0();
drawObj1();
}
使用上面的代码,由于drawRobotBaseArm(); 内部有一个翻译,所以Disk 和Cylinder 也会被翻译。既然我不想这样,我已经取消了drawRobotBaseArm();的代码上下注释
这样做,下面的代码:
glTranslatef(rBaseInitPos + (rBaseDim[0] / 2), rBaseDim[1] + baseIncrement + rBaseDim[1] / 2, rBaseDim[2] / 2);
glRotatef(rBaseArmRotateAngle, 0, 1, 0);
仅对drawRobotBaseArm(); 起作用,现在Disk 和Cylinder 不会平移和旋转。
我似乎无法理解 glPushMatrix() 和 glPopMatrix() 的工作原理。知道如何实现我想要的吗?
【问题讨论】:
标签: opengl