2016-07-24 3 views
1

Так что я пытаюсь только повернуть один объект, я читал другие сообщения о том, как сделать это, но все они просто сказать что-то вроде этого: 1. Вызов glLoadIdentity(); 2. Форма Жеребьевка 3. Вращаяlwjgl, вращающийся только один объект на экране?

Я попробовал то, что они мне сказали, но это не работает для меня?

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 ложных, и один из них имеет значение true, а также тот, который я пытаюсь повернуть. Я поместил строки печати, чтобы проверить, получает ли он идентификатор, что он делает. Также до times 1 добавляется каждый раунд.

Можете ли вы объяснить, где именно я должен позвонить glLoadIdentity()? Возможно, вы захотите это узнать, но он меняет вместо объекта.

ответ

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