lwjgl,只在屏幕上旋转一个对象?

时间:2016-07-24 14:24:57

标签: java api lwjgl

所以我试图只旋转一个对象,我已经阅读了有关如何操作的其他帖子,但所有这些都只是这样说: 1.致电glLoadIdentity(); 2.画出形状 3.旋转

我已经尝试过他们告诉我要做的事情,但它似乎对我不起作用?

if (time != faces.size() - 1 && faces.size() != 1){
            if (faces.get(time+1).needsIdentity){
                GL11.glLoadIdentity();
                System.out.println("The not last identity was set!");
            }
            System.out.println("got identity");
        }else{
            if (faces.get(faces.size() - 1).needsIdentity){
                GL11.glLoadIdentity();
                System.out.println("identity set!");
            }
            System.out.println("got last identity");
        }


        GL11.glBegin(GL11.GL_QUADS);
        GL11.glColor3f(f.clr.red, f.clr.green, f.clr.blue);
        GL11.glVertex3f(f.loc.x - f.x, f.loc.y +  f.y, f.loc.z + f.z);
        GL11.glVertex3f(f.loc.x + f.x, f.loc.y + f.y, f.loc.z + f.z);
        GL11.glVertex3f(f.loc.x + f.x, f.loc.y - f.y, f.loc.z + f.z);
        GL11.glVertex3f(f.loc.x - f.x, f.loc.y - f.y, f.loc.z + f.z);
        GL11.glEnd();
        finished();
    }

public void finished(){
    GL11.glRotatef(rs.rotx, 1F, 0F, 0F);
    GL11.glRotatef(rs.roty, 0F, 1F, 0F);
    GL11.glRotatef(rs.rotz, 0F, 0F, 1F);
    System.out.println("rotated");
}

这是我的代码。 在名为faces的数组中有4个四边形,其中3个为needsIdentity假,其中一个为真,也是我试图旋转的那个。 我已经放入了打印行来检查它是否获得了它的身份。 此外,times每次都会添加1个。

你能解释一下我在哪里打电话给glLoadIdentity()吗? 您可能想知道这一点,但它会旋转我而不是对象。

1 个答案:

答案 0 :(得分:0)

如果您只想旋转场景的某些部分(在您的情况下,只有一个对象),则可以使用glPushMatrix()glPopMatrix()。这允许您在完成绘制要变换的对象后进行变换(例如平移,旋转和缩放)并恢复。不要为glLoadIdentity()而烦恼 - 这会重置所有变换。它可能会让你旋转的原因是因为你可能在多次调用glRotatef(r, x, y, z)之后画了自己。

//Draw some objects here - not rotated

GL11.glPushMatrix(); //Push the matrix onto the stack

//Rotate the object about to be drawn
GL11.glRotatef(rs.rotx, 1F, 0F, 0F);
GL11.glRotatef(rs.roty, 0F, 1F, 0F);
GL11.glRotatef(rs.rotz, 0F, 0F, 1F);

//Draw the object
GL11.glBegin(GL11.GL_QUADS);
GL11.glColor3f(f.clr.red, f.clr.green, f.clr.blue);
GL11.glVertex3f(f.loc.x - f.x, f.loc.y +  f.y, f.loc.z + f.z);
GL11.glVertex3f(f.loc.x + f.x, f.loc.y + f.y, f.loc.z + f.z);
GL11.glVertex3f(f.loc.x + f.x, f.loc.y - f.y, f.loc.z + f.z);
GL11.glVertex3f(f.loc.x - f.x, f.loc.y - f.y, f.loc.z + f.z);
GL11.glEnd();

GL11.glPopMatrix(); //Pop the matrix off of the stack

//Draw some more objects here - not rotated