Reputation: 95
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
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