glRotatef适用于多个对象

时间:2014-05-29 22:16:48

标签: java opengl lwjgl

基本上我想打开一扇门,我想到了使用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();

}

2 个答案:

答案 0 :(得分:4)

常用方法:

glPushMatrix();
glRotatef(/*...*/);
// Drawing commands here
glPopMatrix();

答案 1 :(得分:2)

旋转时,它会旋转整个场景。因此,要旋转单个对象,可以旋转整个场景,绘制对象,然后再旋转屏幕。

glRotatef(i, 0, 1, 0);

// Draw object.

glRotatef(-i, 0, 1, 0);

正如Reto Koradi指出的那样,如果你不断这样做,你可能会出现随时间累积的浮点舍入误差。 HolyBlackCat's answer提供了更好的解决方案。