Java lwjgl,在屏幕上只旋转一个对象?
所以我试着只旋转一个物体,我读过其他关于如何旋转的帖子,但所有的帖子都是这样说的: 1.调用Java lwjgl,在屏幕上只旋转一个对象?,java,api,lwjgl,Java,Api,Lwjgl,所以我试着只旋转一个物体,我读过其他关于如何旋转的帖子,但所有的帖子都是这样说的: 1.调用glLoadIdentity() 2.画图 3.轮换 我试过他们让我做的事,但似乎对我不起作用 if (time != faces.size() - 1 && faces.size() != 1){ if (faces.get(time+1).needsIdentity){ GL11.glLoadIdentity();
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
false,其中一个具有true,也是我正在尝试旋转的那个。
我把打印行放进去检查它是否得到了身份,它确实得到了。
此外,每一轮都会增加到次
1
你能解释一下我应该在哪里调用glLoadIdentity()
?
您可能想知道这一点,但它会旋转我而不是对象。如果您只想旋转场景的某些部分(在您的示例中,是一个对象),可以使用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
如果只希望旋转场景的某些部分(在本例中为一个对象),可以使用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