所以我试图只旋转一个对象,我已经阅读了有关如何操作的其他帖子,但所有这些都只是这样说:
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()
吗?
您可能想知道这一点,但它会旋转我而不是对象。
答案 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