Archived

This topic is now archived and is closed to further replies.

2D Rotation Problem

This topic is 5993 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

I'm in the process of learning OpenGL and I'm writing a simple 2D game and ran into a problem when trying to rotate my bitmap. It seems to me that I should be able to push the matrix, rotate it then draw the bitmap. Wouldn't that draw the bitmap rotated? Here's what I'm doing: Initialize() { ... glViewport(0,0,g_width, g_height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0f, g_width - 1.0f, 0.0f, g_height - 1.0f, -1.0f, 1.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); ... } Render() { ... glPushMatrix(); glRasterPos2f(xPos, yPos); glRotatef(rotation_angle, 0.0f, 0.0f, 1.0f); glDrawPixels(bmpInfoHeader.biWidth, bmpInfoHeader.biHeight, GL_RGB, GL_UNSIGNED_BYTE, bitmapData); glPopMatrix(); ... } Shouldn't that do it? Or is there something I'm missing? Any help would be very appreciated. Thanks, - Mike Edited by - mkaltner on August 18, 2001 12:15:09 AM

Share this post


Link to post
Share on other sites
I don''t think glDrawPixels works with glRotate...

as far as I could tell you could only use glRotate with redering ops (stuff after glBegin())

You may have to use textures with alpha testing/blending so that it will rotate.

Share this post


Link to post
Share on other sites
Okay, I''m using quads with textures now and it''s working okay. Like I said, I''m really new so it''s coming along, just slowly. =)

So now my problem is more complex than just rotation. I can rotate it fine but once it''s rotated, I can''t get my object to move in the direction of the rotation.

I''ve figured out this much:

// move to the ships position and rotate it
glTranslatef(ship.getPositionX(), ship.getPositionY(), 0.0f);
glRotatef(ship.getRotation(), 0.0f, 0.0f, 1.0f);


glPushMatrix();

glTranslatef(0.0f, 0.0f, 0.0f);

glBegin(GL_QUADS);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-8.0f, 16.0f, 0.0f); // top left
glTexCoord2f(0.0f, 0.0f); glVertex3f(-8.0f, -16.0f, 0.0f); // bottom left
glTexCoord2f(1.0f, 0.0f); glVertex3f(8.0f, -16.0f, 0.0f); // bottom right
glTexCoord2f(1.0f, 1.0f); glVertex3f(8.0f, 16.0f, 0.0f); // top right
glEnd();

glPopMatrix();

and that draws my ship and rotates it at it''s middle.

Now, once it''s rotated and I push up, it just moves straight up and down rather than forward in the direction it''s pointing. Any help?

Thanks,
- Mike

Share this post


Link to post
Share on other sites
Well, if you want to use a "real" coordinate system for where your ship is located, you going to have to know some trig.

If you are doing something like this:
EVENT_UPKEYPRESSED: // genaric keypress event
ship.y++;

it''s obvoisly going to move your ship upwards, no matter which direction it''s facing.

if you do something like this:
EVENT_UPKEYPRESSED:
ship.x += MOVEMENT_FACTOR * cos(GetShipAngle());
ship.y += MOVEMENT_FACTOR * sin(GetShipAngle());

it''s going to move your ship in the direction it''s facing. (Note: sin and cos might be switched depending on what the basis for your angles is). Be sure to convert GetShipAngle() into radians, because OpenGL uses degrees.

Share this post


Link to post
Share on other sites