Jump to content
  • Advertisement
Sign in to follow this  
dbrayford

rotation around center point between multiple objects

This topic is 3639 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 am trying to rotate a series of object around the center point between the objects. However, I seem only to be able to rotate around either the origin or some random point but not the center point between the objects. illustrated below. object1 -----------center of rotation------------object2 The function used to draw the scene is below. void DisplayListView::Show(FOR_List * main_list) { FOR * tmp = main_list->head; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); for(int i = 0; i < main_list->get_count(); i++) { glPushMatrix(); glLoadIdentity(); glTranslatef(moveX, moveY, moveZ); glTranslatef(tmp->x, tmp->y, tmp->z); glRotatef(cameraAngleX, 1, 0, 0); // pitch glRotatef(cameraAngleY, 0, 1, 0); // heading glTranslatef(-tmp->x, -tmp->y, -tmp->z); if(tmp->dlist != -1) { glCallList(tmp->dlist); } glPopMatrix(); tmp = tmp->next; } glFlush(); }

Share this post


Link to post
Share on other sites
Advertisement
if i understand your question correctly the following should work for u.

1 - work out the coordinates of the center point by adding up the X, Y and Z values of all the objects and then deviding each total by the amount of objects you have

2 - in your draw cycle right before you start to render your objects translate by the aboive cooirdinates and then rotate by the amount that you want all your objects to be rotated around the center point.

remember to keep incrementing the value by which you rotate each cycle if you want to make a animation out of it

the logic should be something like this

int centerX,centerY,centerZ;
for (i = 0;i < amountOfObjects;i++)
{
centerX = centerX + object.x
centerY = centerY + object.y
centerZ = centerZ + object.z
}
centerX = centerX / amountOfObjects;
centerY = centerY / amountOfObjects;
centerZ = centerZ / amountOfObjects;

glTranslate(centerX,centerY,centerZ);
glRotate(rotX,0,0);
glRotate(0,rotY,0);

rotX++; //if you want the next scene to be different
rotY++; //

//then draw the objects like you normally would


o and youl probley need to take out your glLoadIdentity() and put it as the first thing in your draw cycle before you do any translating or rotating

Home this helps :P

Share this post


Link to post
Share on other sites
Thanks for the help. I've modified the code as illustrated below. However, the rotation isn't around the center point of the objects, but around a point out the objects.

Cheers
David

object1-----object1--X--object1-----object1
X is ideal center of rotation

object1-----object1-----object1-----object1-----X
X is the actual center or rotation

void DisplayListView::Show(FOR_List * main_list)
{
FOR * tmp = main_list->head;

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

for(int i = 0; i < main_list->get_count(); i++)
{
centerX += tmp->x;
centerY += tmp->y;
centerZ += tmp->z;
tmp = tmp->next;
}
centerX = centerX / main_list->get_count();
centerY = centerY / main_list->get_count();
centerZ = centerZ / main_list->get_count();

glLoadIdentity();

// move back to start of list
tmp = main_list->head;

glTranslatef(centerX, centerY, centerZ);
glRotatef(rotX, 1, 0, 0); // pitch
glRotatef(rotY, 0, 1, 0); // heading

for(int i = 0; i < main_list->get_count(); i++)
{
glPushMatrix();
if(tmp->dlist != -1)
{
glCallList(tmp->dlist);
}
glPopMatrix();
tmp = tmp->next;
}
rotX++;
rotY++;
glFlush();
}

Share this post


Link to post
Share on other sites
ok try translating with the inverse of the center after rotating

glTranslatef(centerX, centerY, centerZ);
glRotatef(rotX, 1, 0, 0); // pitch
glRotatef(rotY, 0, 1, 0); // heading
glTranslatef(-centerX, -centerY, -centerZ);

Share this post


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

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!