Jump to content

  • Log In with Google      Sign In   
  • Create Account

2D Rotation Problem


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
4 replies to this topic

#1 mkaltner   Members   -  Reputation: 122

Like
Likes
Like

Posted 18 August 2001 - 05:12 PM

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

Sponsor:

#2 NickW   Members   -  Reputation: 311

Like
Likes
Like

Posted 18 August 2001 - 08:39 PM

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.

#3 Null and Void   Moderators   -  Reputation: 1087

Like
Likes
Like

Posted 18 August 2001 - 10:33 PM

NickW is correct, don''t use glDrawPixels or you miss out on a lot of features, including rotation. Think about it, is it really that hard to use glOrtho and Quads ?

[Resist Windows XP''s Invasive Production Activation Technology!]

#4 mkaltner   Members   -  Reputation: 122

Like
Likes
Like

Posted 19 August 2001 - 08:26 AM

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

#5 NickW   Members   -  Reputation: 311

Like
Likes
Like

Posted 20 August 2001 - 04:12 PM

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.




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS