Archived

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

matrix translation

This topic is 5827 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''d like to know if I translate to a certain position(say 0.0,0.5,0.5) and after that I draw my object, it''s get the same coordinates, right? So if I translate down the x-axis to a knew position and I draw a second object(say 0.5,0.5,0.5), I''ve got a second object with it''s own new coordinates at''s its origin, right, third object same thing...? So if I want to rotate an object in a circle I translate the object and then rotate it, right? Now here''s the problem, do I have to do this after I''ve drawn my object because if I do it before I will just translate 2 times and it will just have a different origin, right? Is calculating the camera position the same thing as for objects? Suppose I want to be able to rotate the camera and transform it(like in a fps), the problem is that the camera''s original coordinates will stay the same, right? So if my camera moves on the x-axis and rotates it will not rotate on its axis but on the first axis I made, so it will rotate in a circel instead? If this makes any sence could you please help me a bit with my problem? Thanks for any replies!

Share this post


Link to post
Share on other sites
quote:
Original post by Xyan
I'd like to know if I translate to a certain position(say 0.0,0.5,0.5) and after that I draw my object, it's get the same coordinates, right? So if I translate down the x-axis to a knew position and I draw a second object(say 0.5,0.5,0.5), I've got a second object with it's own new coordinates at's its origin, right, third object same thing...?



Yes; Of course. If you call glTranslatef(...) then draw an object, the object's (0,0) position will be where the call to Translatef took it.

What is a (0,0) position? When you start out, your drawing point is at the center of a x-y axis intersection. The midpoint of the two are the (0,0) position. When you call something like glVertex3f(0.0, 0.0, 0.0), that vertex is @ (0,0). If you then call glTranslatef(5.0, 0.0, 0.0), then call glVertex3f(8.0, 0.0, 0.0), your object will be drawn 13 units along the x axis.

quote:
Original post by Xyan
So if I want to rotate an object in a circle I translate the object and then rotate it, right?
Now here's the problem, do I have to do this after I've drawn my object because if I do it before I will just translate 2 times and it will just have a different origin, right?



If you intend to move your object you usually call the translation and rotation functions before you draw your object. For example, if you want a spinning triangle inside a sphere, you could do something like this:

      
float rot;

int DrawTriangle(){
glBegin(GL_TRIANGLE);
glVertex3f(-1.0f, 0.0f, 0.0f);
glVertex3f(1.0f, 0.0f, 0.0f);
glVertex3f(0.0f, 1.0f, 0.0f);
glEnd();
glFlush();
}

int RenderScene(){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glPushMatrix();
//draw your sphere

glPopMatrix();

glPushMatrix();
glRotatef(rot, 1.0f, 0.0f, 0.0f);
DrawTriangle();
glPopMatrix();

//swap buffers

}



quote:
Original post by Xyan
Is calculating the camera position the same thing as for objects? Suppose I want to be able to rotate the camera and transform it(like in a fps), the problem is that the camera's original coordinates will stay the same, right? So if my camera moves on the x-axis and rotates it will not rotate on its axis but on the first axis I made, so it will rotate in a circel instead?



yes you are correct. In order to calculate the appropriate rotations and transformations, try something like this:

  
#define SPEED 0.06

int moveFB(int direction);
int moveLR(float angle);

...

bool forward, backward, turnleft, turnright;

float x, y, z;
float lx, ly, lz;

float LRpos;

...

int RenderScene(){
...
if(forward)
moveFB(1);
if(backward)
moveFB(-1);
if(turnleft){
LRpos-=SPEED;
moveLR(LRpos);
}
if(turnright){
LRpos+=SPEED;
moveLR(LRpos);
}

...

//For moving left or right. Requires an angle (float angle)

//that is incremented to turn right and decremented to turn left.

MoveLR(float angle){
lx = sin(angle);
lz = -cos(angle);
glLoadIdentity();
gluLookAt(x, y, z,
x + lx, y + ly, z + lz,
0,1,0);
return 0;
}

//For moving flatly along the z axis. Requires

//one number (int direction), which is either

//'1' for forward or '-1' for backward.

MoveFB(int direction){
x += direction*(lx)*SPEED;
z += direction*(lz)*SPEED;
glLoadIdentity();
gluLookAt(x, y, z,
x + lx, y + ly, z + lz,
0,1,0);
}



quote:

If this makes any sence could you please help me a bit with my problem?
Thanks for any replies!


Remember not to get discouraged. I had similar problems and no one would explain anything to me. I hope this helps.

~Dwarf

If you need any further assistance, contact me: icer@dog.com



Edited by - Dwarf with Axe on January 3, 2002 7:45:33 PM

Edited by - Dwarf with Axe on January 3, 2002 7:47:29 PM

Share this post


Link to post
Share on other sites
I have a question. Why do you take sin, cos and the angle and multiply them? It''s really a forgotten trigonometry lesson, but this is just one thing I don''t understand. I''ve seen the sin and cos curves, but why camera''s, and other moving objects are multiplied by them, I don''t know.

subnet_rx


"There are two types of langages, those that everyone bitches about, and those that no one uses."

Standardized C++ Libraries

C++ Programming help

The only news site on the web

Share this post


Link to post
Share on other sites
Oh! I''m sorry! I thought you were putting down my function. =)

The reason you need the sin and cos in there is because the ''camera'' in OpenGL never moves. It is always at one point. In terms of a FPS, it''s the world that you move, not the player. The reason you need geometric calls is because when you move along the axis, you need a way to move freely, and not be pathminded onto an axis.

For example, if I had a 3D game and moved forward, I would be moving along the z axis (no math). If I turn left, I just rotate (no math), but if I start walking back to where I came from at a different angle from the original, then I need a way of moving the world so that it looks like I am really moving. Otherwise, the world will just rotate and translate along the axis, and that''s not good.

In Short: They''re for camera movement reguarding world translation/rotation.

~Dwarf


Why am I the only one on this away team wearing a red shirt?

Share this post


Link to post
Share on other sites