如何在JOGL中独立于彼此的轴旋转两条线?

时间:2017-04-12 16:36:37

标签: java graphics jogl

下面给出了我使用JOGL创建的两行代码。沿x轴的一条线,而另一条线,z。当我执行下面的代码时,沿x轴的直线按预期绕z轴旋转,但是,沿z轴的直线不仅围绕x轴旋转,它还会意外地围绕z轴旋转(它是自己的轴)。我如何防止这种情况发生?

    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 个答案:

答案 0 :(得分: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...