2016-07-24 51 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爲假,其中一個爲真,也是我試圖旋轉的那個。 我已經放入打印行來檢查它是否得到了它的身份。 也爲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