Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java lwjgl,在屏幕上只旋转一个对象?_Java_Api_Lwjgl - Fatal编程技术网

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

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();

所以我试着只旋转一个物体,我读过其他关于如何旋转的帖子,但所有的帖子都是这样说的: 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
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