# rotating space ship

## Recommended Posts

phil67rpg    443

well I am going back to opengl.I am working on an asteroids game.it has been a long time since I have posted. I really like opengl.my question is how do I get a space ship rendered using line loop and vertices rotate around its center relative to where its drawn. I know I have asked this question before but I never solved this problem. I know I should use glRotate and glTranslate commands in the correct order.

##### Share on other sites
alvaro    21246
What did you try? If that didn't work, try reversing the order of the rotation and the translation.

##### Share on other sites
DejaimeNeto    4221

What did you try? If that didn't work, try reversing the order of the rotation and the translation.

Take a look here. Looks like it is still an unsolved problem...

phil, what's your native language?

Edited by dejaime

##### Share on other sites
phil67rpg    443

I have tried reversing the order of the rotation and translate commands.

##### Share on other sites
phil67rpg    443

I am using c++ and opengl

##### Share on other sites
richardurich    1352

First, you have to translate your object so its center is at the origin. Then you rotate your object, and then you translate your object to its final destination.

##### Share on other sites
alvaro    21246

First, you have to translate your object so its center is at the origin. Then you rotate your object, and then you translate your object to its final destination.

Yes, but objects typically start centered around the origin (a.k.a. "model space" or "model coordinates") and then they get put in the world through a transformation that consists of a rotation and a translation. I don't know why that basic method won't work for him.

##### Share on other sites
Trienco    2555

First, you have to translate your object so its center is at the origin. Then you rotate your object, and then you translate your object to its final destination.

That only works if you look at things from a "world view". Rotating (with glRotate) changes the local coordinate system of the object and the translation will move along the local coordinate system axes (just like rotation always happens around the current origin, aka. the objects position).

So the order in OpenGL (assuming the object is modeled around the origin) is glTranslate into position and then glRotate.

At least "thinking local" would seem a lot more intuitive than saying "OpenGL is doing everything backwards for some reason".

Of course those functions are technically deprecated and once handling matrices yourself it all boils down to multiplication order.

##### Share on other sites
phil67rpg    443

should I repost my code?

##### Share on other sites
DejaimeNeto    4221

Please, do post an updated version of it.

Can you do a small test?

What happens if you only rotate, and remove the translate?

What happens if you only translate?

##### Share on other sites
phil67rpg    443

What happens if you only rotate, and remove the translate?
What happens if you only translate?

ok I will try that

##### Share on other sites
phil67rpg    443

here is my code

void DrawShip(GLfloat position_X,GLfloat position_Y, GLfloat position_Z, GLfloat rotation,GLfloat color)
{
glPushMatrix();
glColor3f(color,0.0f,0.0f);
glRotatef(rotation,0.0f,0.0f,1.0f);
glTranslatef(position_X,position_Y,position_Z);
glBegin(GL_LINE_LOOP);
glVertex3f(0.0f,-0.25f,0.0f);
glVertex3f(-0.25f,-0.5f,0.0f);
glVertex3f(-0.5f,-0.5f,0.0f);
glVertex3f(-0.0f,0.5f,0.0f);
glVertex3f(0.5f,-0.5f,0.0f);
glVertex3f(0.25f,-0.5f,0.0f);
glVertex3f(0.0f,-0.25f,0.0f);
glEnd();
glPopMatrix();
}


##### Share on other sites
phil67rpg    443

I tried rotate only and it only rotates and I tried translate only and it only moves.

##### Share on other sites
DejaimeNeto    4221

I tried rotate only and it only rotates
But does it rotates correctly? Or around some weird point?

##### Share on other sites
phil67rpg    443

it rotates around the screen origin

##### Share on other sites

I'm pretty sure you are beyond help you've been asking this same question for years. Have you tried learning some maths?

##### Share on other sites
Lactose    11446

I'm pretty sure you are beyond help you've been asking this same question for years. Have you tried learning some maths?

http://www.arcsynthesis.org/gltut/

This might be of help.

##### Share on other sites
phil67rpg    443

what math should  I study

##### Share on other sites

Vectors and linear algebra.

##### Share on other sites
phil67rpg    443

what part of linear algebra should I focus on?

##### Share on other sites
DejaimeNeto    4221

I think what's wrong here is that he is drawing the small ship on a larger object and rotating this same larger object, what causes the ship to not rotate correctly. The fact that I don't know a line of OpenGL halts me, but certainly our communication is the main issue...

##### Share on other sites
phil67rpg    443

thanks dejaime but I have only one object that I am translating and rotating.

##### Share on other sites
Trienco    2555

Dejaime, OpenGL is simple. The deprecated functions to modify the matrix stack simply operate on the local coordinate system/object space/whatever you like to call it. So it should be obvious why it's wrong to rotate first if your position is given in world space.

Not that it matters, because 3 posts from now, he will announce researching this and looking into that, disappear for a while and after a few months post the exact same code with the exact same question, showing zero progress or improvement and have half the people on the forum wonder if he's trolling us (and yet again he will ask what that means) or if he's really so completely beyond help that you'd have better luck explaining colors to a blind man.

To quote BSG: "All of this has happened before, and all of it will happen again." (ie. "just check his history")

##### Share on other sites

what part of linear algebra should I focus on?

Definitely the Cayley-Hamilton Theorem.

##### Share on other sites
SunDog    232

Ok, a really brief overview:

1) Be sure that the origin (0,0,0) defines where you want your model to rotate about, this could be a problem with the model file. For instance, if you are describing a box, the vertex coordinates should go from negative x, y, z to positive x, y, z, e.g., the six vertices (1, 0, 0) , (-1, 0, 0), (0, 1, 0), (0, -1, 0), (0, 0, -1), (0, 0, 1)   The "center" of the box would be at the origin.  If this is not true, none of the following will work.

3)  Two ways to do rotations, quaternions and matrices.   Matrices are a little easier to grasp for the beginner, but quaternions involve less computation.   The "standard" way is matrices.

3) The Matrix way:  You have independent rotationa bout the x, y, z, axes.   These are normally termined pitch, yaw, and roll.   You then generate three matirces which descbibed these independent rotations, and multiply these matrices together, along with the translation matrix which locates your object in the world.   In math terms, this a transformation is from "model" space to "world" space.   You will often hear this matrix described as the "world" matrix.  This matrix is then multiplied by the "view" (camera position and rotation) and "projection" (perspective, orthogonal ) matrices to produce the 2D x,y coordinates on your display.

The Quaternion way:   You have an "axis of rotation", which is defined by a 3D vector, and additional number which indicates the amount and direction (positive or negative)of rotation.   So a quaternion is really 4D vector. For example, if the axis of rotation represents the direction that the object is travelling in, then a rotation about this axis would be a "roll" which respect to the direction of travel of the object.   Then add your translation vector.  You then multiply the vertex coordinates (a 3D vector) by the quaternion, which proces another 3D vector.

Edited by SunDog

## Create an account or sign in to comment

You need to be a member in order to leave a comment

## Create an account

Sign up for a new account in our community. It's easy!

Register a new account