Да, это стандартный метод, который нужно применять, когда вы хотите изменить матрицу просмотра модели, это то, что делают glPushMatrix()
и glPopMatrix()
, сохраняет вашу текущую матрицу просмотра модели в стеке матрицы.
Допустим, у вас есть второй объект, сфера, которая имеет различные изменения в своих координатах, ради аргумента просто перевод на -5 по оси OX.
Если вы попытаетесь:
//for spehere
glTranslatef(-5.0f,0.0f,0.0f):
drawSphere();
//for cube
glTranslatef(-1.0f,0.0f,0.0f)
glRotatef(theta[0], 1.0, 0.0, 0.0);
glRotatef(theta[1], 0.0, 1.0, 0.0);
glRotatef(theta[2], 0.0, 0.0, 1.0);
drawCube();
Вы на самом деле будете переводить свой куб на -6.0 по оси быка вместо -5.0.
Чтобы исправить это, вам просто нужно использовать glPushMatrix(), glPopMatrix()
.
//for spehere
glPushMatrix();
glTranslatef(-5.0f,0.0f,0.0f):
drawSphere();
glPopMatrix();
//for cube
glPushMatrix();
glTranslatef(-1.0f,0.0f,0.0f)
glRotatef(theta[0], 1.0, 0.0, 0.0);
glRotatef(theta[1], 0.0, 1.0, 0.0);
glRotatef(theta[2], 0.0, 0.0, 1.0);
drawCube();
glPopMatrix();
Этоспособ сохранения исходной матрицы просмотра модели, чтобы можно было применять правильные преобразования для каждого объекта.