DealerJoe
DealerJoe

Reputation: 95

LWJGL Rotating one object only



I am trying to rotate only one of two objects in my scene which I created in Java using LWJGL.
Now, when I try to rotate one object, it doesn't rotate around it's center but in large circles. After searching on Google I now know that it should work like this :

glPushMatrix();
glBegin();

  //Code in here

glEnd();
glRotate();
glPopMatrix();

But it's not working for me. The object isn't rotating. This is my render code :

    public void render() {

        glPushMatrix();

            glRotatef(rotate, 0, 1.0f, 0);                   

            glBegin(GL_QUADS);

                // Top
                glVertex3f(-centerX + size, centerY + size, -centerZ - size);
                glVertex3f(-centerX - size, centerY + size, -centerZ - size);
                glVertex3f(-centerX - size, centerY + size, -centerZ + size);
                glVertex3f(-centerX + size, centerY + size, -centerZ + size);
                // Bottom
                glVertex3f(-centerX + size, centerY - size, -centerZ + size);
                glVertex3f(-centerX - size, centerY - size, -centerZ + size);
                glVertex3f(-centerX - size, centerY - size, -centerZ - size);
                glVertex3f(-centerX + size, centerY - size, -centerZ - size);
                // One side
                glVertex3f(-centerX + size, centerY + size, -centerZ + size);
                glVertex3f(-centerX - size, centerY + size, -centerZ + size);
                glVertex3f(-centerX - size, centerY - size, -centerZ + size);
                glVertex3f(-centerX + size, centerY - size, -centerZ + size);
                // Moar sides
                glVertex3f(-centerX + size, centerY - size, -centerZ - size);
                glVertex3f(-centerX - size, centerY - size, -centerZ - size);
                glVertex3f(-centerX - size, centerY + size, -centerZ - size);
                glVertex3f(-centerX + size, centerY + size, -centerZ - size);
                // Last side
                glVertex3f(-centerX - size, centerY + size, -centerZ + size);
                glVertex3f(-centerX - size, centerY + size, -centerZ - size);
                glVertex3f(-centerX - size, centerY - size, -centerZ - size);
                glVertex3f(-centerX - size, centerY - size, -centerZ + size);
                // Real last side
                glVertex3f(-centerX + size, centerY + size, -centerZ - size);
                glVertex3f(-centerX + size, centerY + size, -centerZ + size);
                glVertex3f(-centerX + size, centerY - size, -centerZ + size);
                glVertex3f(-centerX + size, centerY - size, -centerZ - size);

            glEnd();

        glPopMatrix();

        rotate++;
}

I now tried fixing this problem for hours but couldn't get it to work.

Upvotes: 2

Views: 803

Answers (1)

Zutty
Zutty

Reputation: 5377

You should call glRotate() and glTranslate() before you draw the quads.

Remember that the order of transformations is important. Rotation is always about 0,0,0, so if you translate first it will sort of 'orbit' around a point in a circle. If you want it to rotate around its own axis (which you probably do) rotate first, then translate.

There is a section in this article about the order of transformations.

http://www.glprogramming.com/red/chapter03.html

Upvotes: 1

Related Questions