View Full Version : Calculating Positions based upon glRotatef
i have the following code:
{
DoTranslateRotate();
glBegin(GL_POINTS);
glVertex3f(x,y,z);
glEnd();
UndoTranslateRotate();
}
void DoTranslateRotate()
{
//Perform XYZ Translation
glTranslatef(COrigin.x,COrigin.y,COrigin.z);
//Perform XYZ rotations
glRotatef(COrigin.xAngle, 1.0f,0.0f,0.0f);
glRotatef(COrigin.yAngle, 0.0f,1.0f,0.0f);
glRotatef(COrigin.zAngle, 0.0f,0.0f,1.0f);
}
void UnDoTranslateRotate()
{
//Undo XYZ rotations
glRotatef(-COrigin.zAngle, 0.0f,0.0f,1.0f);
glRotatef(-COrigin.yAngle, 0.0f,1.0f,0.0f);
glRotatef(-COrigin.xAngle, 1.0f,0.0f,0.0f);
//Undo XYZ Translation
glTranslatef(-COrigin.x,-COrigin.y,-COrigin.z);
}
i want to know where the point (x,y,z) will be drawn, and i do know the Data in COrigin
is there some way i can use the OGL matrix and just multiply the matrix by my {X Y Z} values to obtain the new X, Y, Z that the point will appear at (relative to the world)
say if i had the point (1,0,0) and i rotated my y - axis 180 degrees, the point is now at (-1,0,0) correct? given the XYZ, and the rotations i want to find the new XYZ location.
M/\dm/\n
01-08-2003, 02:38 AM
When you call glrotatef(alpha,x,y,z) you give angle alpha, & amount to rotate on x,y&z axis. So everything else is pure math (sin,cos)
But you can use modelview matrix, as 1st row will include all x coord trans, y all y trans and so on (or maybe not, I forgot that as I had a lot of work to be done at uni) take a look at matrix multiplication defs.
im using the perspective matrix so that wont work exactly. i need openGLs calculation
unless a better way of figuring it out can be done
what im trying to do is to see if a user has clicked on a square which can be viewed from any angle. so this is affected by the matrix that openGL is using.
DFrey
01-08-2003, 09:12 PM
See gluUnproject and/or gluProject.
[This message has been edited by DFrey (edited 01-08-2003).]
nexusone
01-09-2003, 04:17 AM
You do understand the order in which you call the translate and rotate has a big effect on the location of the object.
Also the the last command before drawing the object is the one effecting the object first.
In the order you have it:
glRotate
glTranslate
Draw_object();
What happens is the object is translated from its origin to some location, then rotate about the openGL's axis of 0,0,0.
So if say you translate the object 5 units out on the X axis and then rotate 20 degrees. The object will be moved along the openGL origin in a 20 degree arc along the axis of rotation with a radius 5 units.
Now if you do the following:
glTranslate
glRotate
Draw_object()
The object is rotated on the openGL 0,0,0 axis and then moved out to the location.
{
DoTranslateRotate();
glBegin(GL_POINTS);
glVertex3f(x,y,z);
glEnd();
UndoTranslateRotate();
}
void DoTranslateRotate()
{
//Perform XYZ Translation
glTranslatef(COrigin.x,COrigin.y,COrigin.z);
//Perform XYZ rotations
glRotatef(COrigin.xAngle, 1.0f,0.0f,0.0f);
glRotatef(COrigin.yAngle, 0.0f,1.0f,0.0f);
glRotatef(COrigin.zAngle, 0.0f,0.0f,1.0f);
}
void UnDoTranslateRotate()
{
//Undo XYZ rotations
glRotatef(-COrigin.zAngle, 0.0f,0.0f,1.0f);
glRotatef(-COrigin.yAngle, 0.0f,1.0f,0.0f);
glRotatef(-COrigin.xAngle, 1.0f,0.0f,0.0f);
//Undo XYZ Translation
glTranslatef(-COrigin.x,-COrigin.y,-COrigin.z);
}
i want to know where the point (x,y,z) will be drawn, and i do know the Data in COrigin
is there some way i can use the OGL matrix and just multiply the matrix by my {X Y Z} values to obtain the new X, Y, Z that the point will appear at (relative to the world)
say if i had the point (1,0,0) and i rotated my y - axis 180 degrees, the point is now at (-1,0,0) correct? given the XYZ, and the rotations i want to find the new XYZ location.[/B]<HR></BLOCKQUOTE>
[This message has been edited by nexusone (edited 01-09-2003).]
Yeah, i get all that.
but i need the X,Y position in terms of pixels from the top left of the window given the 3d co-ord for my model.
my model code works fine, it draws it textures, but i cant obtain the xy position of a given xyz position after it has been drawn and rotated and viewport transformed.
JustHanging
01-10-2003, 04:04 AM
Like DFrey said, use gluProject. It does exactly what you need. For more advanced picking try gluPickMatrix and glRenderMode(GL_SELECT).
-Ilkka
Powered by vBulletin® Version 4.2.0 Copyright © 2013 vBulletin Solutions, Inc. All rights reserved.