В основном я хочу открыть Дверь, и я подумал об использовании glRotatef. Моя проблема в том, что она затрагивает каждый объект, который нарисован после него. Кто-нибудь знает, как остановить это?
Door.class
public static void draw(Texture door) {
door.bind();
if(Door_Test.state == "out" && d != 90){
glRotatef(i, 0, 1, 0);
i+=5;
}
glBegin(GL_QUADS);
glColor3f(1f, 1f, 1f);glTexCoord2f(0,0);glVertex3f(-2,3, -15);
glColor3f(1f, 1f, 1f);glTexCoord2f(0,1);glVertex3f(-2,-3, -15);
glColor3f(1f, 1f, 1f);glTexCoord2f(1,1);glVertex3f(2,-3, -15);
glColor3f(1f, 1f, 1f);glTexCoord2f(1,0);glVertex3f(2,3, -15);
glEnd();
}
Когда вы вращаетесь, он вращает всю сцену. Поэтому, чтобы повернуть один объект, вы вращаете всю сцену, рисуете свой объект, а затем поворачиваете экран назад.
glRotatef(i, 0, 1, 0);
// Draw object.
glRotatef(-i, 0, 1, 0);
Как отметил Ретро Коради, если вы постоянно это делаете, у вас могут быть ошибки округления с плавающей запятой, которые накапливаются с течением времени. Ответ HolyBlackCat предлагает лучшее решение.
Обычный способ сделать это:
glPushMatrix();
glRotatef(/*...*/);
// Drawing commands here
glPopMatrix();
glPushMatrix()
иglPopMatrix()
, лучше IMHO.