Ok, I have a somewhat complicated math issue (well, to me it is). Rotating objects around an axis that have a slope.

Started by
4 comments, last by Cornstalks 11 years, 6 months ago
Say I have two objects that Im drawing in Opengl. The first object is my base object and has offset (x,y).This is part 1. The second object offset is (X+2,y+3).Part 2. These two objects are drawn separately but make up a whole "object" in the game. I need them to always have this relationship with each other so the game "object" looks right in the game. Now when I want to rotate this "object" each part is rotated separately and obviously this changes how it looks (because they stay at the same slope to each other while they rotate).
I know that to rotate for just one object being drawn I need to rotate at the origin and then move it to where I want it to be. This is easy for the base object but I need the second part to to also stay in the right position relative to that base object. At no angle this is accomplished by giving it the offset (x+2,y+3) like I said before, but when I rotate it obviously the slope is now going to need to change for it to stay in the "right place". I need to account for this change so the part stays "in its correct place". I need to know how the rotation effects the slope of part two.

I basically need an equation that accounts for the rotation when determining the slope. Theses two "objects" are going to rotate around my player.


I hope I explained this well.
Advertisement
Double post...
You want to rotate (2, 3) then, and add the result of that instead of (2, 3). How do you perform the rotations now?
If you use glTranslate and glRotate etc, then just choose the operation order so that glRotate is applied after the (2, 3) translation. If you do your matrices some other way, then just multiply (2, 3) with your rotation matrix to get the correctly rotated offset.
How your object is drawed, with sprites or vectoric? Or is it 3d?
I had something similar problem, but my objects was made form bunch of points and all drawings was made from these points, 2 of points are control points that actualy are rotated each loop , and other points precalcs from these 2 control points only before drawing.
Maybe it could be usefull in your game?
Try posting an example, I can't see where this is going wrong.
I'll respond here since it was first.

Here's probably what I would do: create a class called "Group" (or something) that stores both of these objects. This class, Group, stores a transformation matrix that represents the scale, position, and rotation of the group. Each individual object then just stores its offset from the group's center (and once you set it once, you never have to change it, even when rotation/moving/scaling the group).

When you go to draw, take the Group's matrix and then 1) take the first object and compose its offset with the Group's matrix, and draw using this matrix, then 2) take the second object and compose its offset with the Group's matrix, and draw using this matrix.

Try this, and if it doesn't work, post some of your code.


If you use glTranslate and glRotate[...]

I don't think we should be encouraging anyone using those functions, seeing as they were deprecated in OpenGL 3.0 and removed in OpenGL 3.1. What you pointed out is useful and correct, but I just want to point out that if the OP is using them, he should stop.
[size=2][ I was ninja'd 71 times before I stopped counting a long time ago ] [ f.k.a. MikeTacular ] [ My Blog ] [ SWFer: Gaplessly looped MP3s in your Flash games ]

This topic is closed to new replies.

Advertisement