• Advertisement
Sign in to follow this  

rotating space ship

This topic is 1422 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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 this post


Link to post
Share on other sites
Advertisement

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 this post


Link to post
Share on other sites

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 this post


Link to post
Share on other sites

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 this post


Link to post
Share on other sites

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 this post


Link to post
Share on other sites

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 this post


Link to post
Share on other sites

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 this post


Link to post
Share on other sites

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 this post


Link to post
Share on other sites

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 this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement