Results 1 to 6 of 6

Thread: Cumulative transformation/rotation

  1. #1
    Guest

    Cumulative transformation/rotation

    OK,

    I'm going to try and explain this better this time. In OpenGL, the glTransform and glRotate are cumulative (presumably because they operate on a homogeneous matrix) in that if you rotate and then transform your axis for the transformation will have been rotated as well:

    glLoadIdentity();

    glTranslatef(v1.x, v1.y, v1.z);
    glRotatef(angle, 0.0f, 0.0f, 1.0f);

    glBegin();
    // Textured quad drawn here
    glEnd();
    glFlush();

    Vector v1 stores the current location of an object. The Problem:

    Every time you want to move an object that has velocity, you base your next position on the screen off of:

    x += velocity * cos(angle * (PI/180));
    y += velocity * sin(angle * (PI/180));

    Well, what if you want to rotate your object and keep the velocity going the same direction? The way I have it now, if you rotate the object, it will rotate the modelview coordinate system, which in turn applies the velocity to the new angle the next time around in the game loop. I don't want this behavior. I want the velocity to be constant in one direction, until you specifically put on thrusters in a different direction. In other words, you could rotate all you want, but you'd still be going the same direction until you hit the thrusters, just like the game Asteroids.

    What do I do to eliminate this undesired effect? I'm storing variables X, Y, Z, velocity, deltaVelocity, angle (in degrees) and deltaAngle.

    If I were to describe this effect visually, imagine in the real Asteroids applying the thrusters once, then letting go and rotating. In the real game the ship will rotate in place, and move in a constant direction until you thrust somewhere else.

    However, in mine if you hold down left or right while moving (but not thrusting) the ship will move in a circle with a diameter directly proportional to the amount of velocity you have. Nice for drawing circles - terrible for cloning Asteroids. How do I keep the velocity from being rotated to another direction unless I specifically apply thrusters?

    I hope everyone can understand what I'm saying this time and I appreciate the patience of people who have read my other post and maybe DID understand it. I have tried the one solution suggested so far and while it did make my code more complete, the problem still exists - unless I was simply mistaken in how I implemented it. I'm aware of the fact that the problem is my lack of knowledge, but no book I've read discusses this.

    I'm looking forward to any help anyone can provide. This is my first project with OpenGL and I've already learned a lot. Thanks!

  2. #2
    Senior Member Regular Contributor
    Join Date
    Feb 2003
    Location
    Westerville, Oh, USA
    Posts
    201

    Re: Cumulative transformation/rotation

    Your code doesn't work? Hmmm...looking at figure 3-4 in the Red Book (http://tassadar.physics.auth.gr/~cha...%20Red%20Book/), I would think that it would work.

    If you think in terms of the "grand, fixed coordinate system", your ship should be rotated about the Z-axis at the origin, then translated to the point you specify (because in this case, the transformations occur in the order opposite of your code).

    If you think in terms of a "local coordinate system", your ship should be translated to the point you specified and then translated about the Z-axis in the local system (because in this case, the transformations occur in the order they appear in your code).

    Or am I getting this bass-ackwards?

  3. #3
    Guest

    Re: Cumulative transformation/rotation

    I must be failing to understand something very simple. My translations and rotations work as intended separately, just not together. I can be at origin x = 0.0 y = 0.0 and rotate. I can rotate fine anywhere as long as I am stationary. I can stop, rotate and then translate and I will move in the direction I'm supposed to be going.

    The problem occurs when I try to do both at the same time. If I'm translating, and I try to rotate while I'm translating, I'll move in a circle. Now in one respect this condition is desirable - when I'm applying thrust. But when I'm not applying thrusters, I should just be able to rotate and my rotation should not affect the direction towards which the velocity was originally applied.

    Am I making sense here?

  4. #4
    Guest

    Re: Cumulative transformation/rotation

    For the sake of the people who have not played Asteroids:
    http://www.mathcs.sjsu.edu/faculty/r...oidsj1jar.html

    Apply thrust, and then let go. Rotate. Notice your direction and velocity will not change while you're rotating unless you apply thrust again.

    In mine, the direction will change when you rotate, regardless of whether you are thrusting or not.

  5. #5
    Senior Member Regular Contributor
    Join Date
    Feb 2003
    Location
    Westerville, Oh, USA
    Posts
    201

    Re: Cumulative transformation/rotation

    I know what you're saying now. I did a quick google search on "asteroids ship movement" and found the thread below. The third message has some BASIC code that the purportedly solves the problem.
    http://groups.google.com/groups?hl=en&lr...6q%3Dasteroids% 2Bship%2Bmovement

  6. #6
    Guest

    Re: Cumulative transformation/rotation

    Thanks Starman... I really appreciate the effort. Didn't know that the ship movement in Asteroids was so well-documented.

    This should be the answer to my problem. Thanks again!

Similar Threads

  1. Model transformation from transformation between two frames.
    By VitaliyO in forum OpenGL: Basic Coding
    Replies: 0
    Last Post: 03-21-2017, 02:07 AM
  2. Matrix Rotation loses 1 axes of rotation
    By Benzino in forum OpenGL: Basic Coding
    Replies: 1
    Last Post: 02-15-2011, 06:53 AM
  3. Replies: 1
    Last Post: 04-16-2010, 02:59 PM
  4. changing axis of rotation and center of rotation in openGL performer
    By ravishashi in forum OpenGL: Advanced Coding
    Replies: 1
    Last Post: 07-08-2003, 04:42 AM
  5. how to calculate the transformation matrix for a rotation?
    By jyoung77 in forum OpenGL: Advanced Coding
    Replies: 2
    Last Post: 04-27-2003, 08:48 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Proudly hosted by Digital Ocean