2017-04-12 95 views
0

下面給出的是我使用JOGL創建的兩行代碼。沿着x軸的一條線,而另一條線z。當我執行下面的代碼時,沿着x軸的線圍繞z軸旋轉,但是,沿着z軸的線不僅圍繞x軸旋轉,還意外繞着z軸旋轉(它是自己的軸)。我如何防止這種情況發生?JOGL中,我如何旋轉兩條獨立於對方軸線的線?

public void display(GLAutoDrawable drawable){ 

    final GL2 gl = drawable.getGL().getGL2(); 
    gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT); 
    gl.glLoadIdentity(); 

    gl.glRotatef(rtri, 0.0f, 0.0f, 1.0f);//rotation about z axis 
    gl.glBegin (GL2.GL_LINES); 
    gl.glColor3f(0.0f, 1.0f, 0.0f); 
     gl.glVertex3f(-0.50f, 0.0f, 0);//vertex 1 of line 1 
     gl.glVertex3f(0.50f, 0.0f, 0);//vertex 2 of line 1 
     gl.glEnd(); 
     gl.glFlush(); 

    gl.glRotatef(rtri, 1.0f, 0.0f, 0.0f);//rotation about x axis 
    gl.glBegin (GL2.GL_LINES); 
    gl.glColor3f(0.0f, 1.0f, 0.0f); 
     gl.glVertex3f(0.0f, 0, 0.5f);//vertex 1 of line 2 
     gl.glVertex3f(0.0f, 0, -0.5f);//vertex 2 of line 2 
     gl.glEnd(); 
     gl.glFlush(); 

    rtri+=0.30f; 

} 

回答

1

glRotate對當前活動矩陣進行更改,然後將其與頂點向量相乘。 glLoadIdentity重置此矩陣。如果你想第二行完全獨立旋轉,你只需要在繪製第一行後重新設置它:

gl.glLoadIdentity(); // reset matrix 

gl.glRotatef(rtri, 0.0f, 0.0f, 1.0f); // change matrix 
// draw a line... 

gl.glLoadIdentity(); // reset matrix, ... again  

gl.glRotatef(rtri, 1.0f, 0.0f, 0.0f); // change matrix 
// draw a line... 
+0

謝謝你,它的工作。 –