Jump to content
  • Advertisement
Sign in to follow this  
BirdGB

Opengl object positioning?

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

Hi,
I just want to know a simple question regarding the glTranslatef. How do I position 10 plaines one after another in x axis, like a tile map using a plain?
I don't want to use glVertex3f to do so.

for(int i=0; i<10; i++)
{
glTranslatef(i, 0.f, 0.f);
glutSolidPlaine();
}


Above is what I am doing right now. But It is overlapping each other by half.

Thanks in advance.
Regards

Share this post


Link to post
Share on other sites
Advertisement
Hi Chhetri,
I tryed that way. the width of the plaine is 1 unit. But all plaines just move 1/2 unit to +x axis but remain as it is.

Thanks for reply
Regards

Share this post


Link to post
Share on other sites
Don't you just want to translate it by the width of the plane each time through the loop (probably after rendering)? (i is not relevant here since calls to glTranslate will be cumulative as you're not pushing / popping from the matrix stack):

e.g. assuming the width of the plane is 5 you want:

// render at (0, 0, 0)
glTranslate(5, 0, 0);

// render at (5, 0, 0)
glTranslate(5, 0, 0);

// render at (10, 0, 0)
glTranslate(5, 0, 0);

// render at (15, 0, 0)

Note that the results will depend on the model space origin of the plane. (If the origin is in the center of the plane, you might want to translate once by half the plane width before rendering, depending on how you want your grid positioned in world space).

Share this post


Link to post
Share on other sites
Hi __sprite,
Actually I posted above code for siplicity. Here is my actual code:


void DrawTiles(void)
{
for(int i=0; i<10; i++)
{
for(int j=0; j<10; j++)
{
switch(cMap[j])
{
case 0:
glBindTexture(GL_TEXTURE_2D, texture1);
break;
case 1:
glBindTexture(GL_TEXTURE_2D, texture2);
break;
}
glPushMatrix();
glTranslatef((j, 0.f, i);
plaine->DrawPlaine(1.0f);
//plaine->setPosition(j, 0.f, i);
glPopMatrix();
}
}
}


Pivot position is upper left corner, not middle.

Thanks for reply
Regards

Share this post


Link to post
Share on other sites
Hidden
Is your plane both 1 unit wide and one unit long? If not you need to multiply j and i by the plane size on that axis:


// push
glTranslatef(j * plaine->GetXSize(), 0.f, i * plaine->GetZSize());
// draw
// pop

Share this post


Link to post
Sign in to follow this  

  • Advertisement
×

Important Information

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

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!